python找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
时间: 2024-05-05 10:17:56 浏览: 94
这是一个关于 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]`。
编写一个函数selfidem(n),以大于1的正整数n为参数,返回n位数中符合幂数要求的数的列表,一个n位字幂数满足每一位数的n次方相加等于这个数本身,利用该函数编程找出三位数中的水仙花数
以下是实现函数`selfidem(n)`的Python代码:
```python
def selfidem(n):
res = []
for i in range(10**(n-1), 10**n):
sum = 0
tmp = i
while tmp > 0:
sum += (tmp % 10) ** n
tmp //= 10
if sum == i:
res.append(i)
return res
```
函数中使用了一个循环,枚举了所有n位数,然后对每个数进行了判断,如果是水仙花数,则将其加入结果列表中。接下来,我们可以利用该函数找出三位数中的水仙花数:
```python
res = selfidem(3)
print(res)
```
输出结果为:`[153, 370, 371, 407]`,即三位数中的水仙花数为153、370、371和407。
阅读全文