python找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
时间: 2024-05-05 12:17:56 浏览: 8
这是一个关于 Python 的编程问题。可以使用回溯算法来解决这个问题,具体实现可以参考以下代码:
```
def combination_sum_k(n, k):
res = []
def backtrack(start, target, path):
if target == 0 and len(path) == k:
res.append(path)
return
if target < 0 or len(path) == k:
return
for i in range(start, 10):
backtrack(i + 1, target - i, path + [i])
backtrack(1, n, [])
return res
print(combination_sum_k(9, 3)) # 输出 [[1, 2, 6], [1, 3, 5], [2, 3, 4]]
```
希望对你有所帮助!接下来,你可以问我下一个问题了。
相关问题
编写-一个函数,以大于1的正整数n为参数,返回n位数中符合自幂数要求的数的列表。1个n位自幂数满足每一位数的n次方相加等于这个数本身。利用该函数编程找出3位数中的水仙花数。
以下是 Python 代码实现:
```python
def narcissistic_numbers(n):
result = []
for i in range(10**(n-1), 10**n):
digits = [int(d) for d in str(i)]
if sum([d**n for d in digits]) == i:
result.append(i)
return result
narcissistic_3 = narcissistic_numbers(3)
print(narcissistic_3)
```
输出结果为:
```
[153, 370, 371, 407]
```
其中,水仙花数即为3位自幂数,即列表中的 `[153, 370, 371, 407]`。
编写一个函数,以大于1的正整数n为参数,返回n位数中符合字数要求的数的列表,一个n位字秘书满足每一位数的n次方相加等于这个数本身,利用该函数编程找出三位数中的水仙花数
以下是 Python 代码实现:
```python
def narcissistic_numbers(n):
"""
返回 n 位数中符合字数要求的数的列表
"""
result = []
for i in range(10**(n-1), 10**n):
s = str(i)
if sum(int(c)**n for c in s) == i:
result.append(i)
return result
# 找出三位数中的水仙花数
narcissistic_3 = narcissistic_numbers(3)
print(narcissistic_3)
```
输出结果为:
```
[153, 370, 371, 407]
```
其中 153、370、371 和 407 都是三位数中的水仙花数。