#力扣每日一题 216,组合总和III
##题目描述:找出所有总和为n的k个数的组合,组合中只允许有1-9的正整数,且组合里不能有重复的数字。
本人比较菜,刚开始毫无头绪,就想到要有k个数的话是不是得遍历1-9这几个数k遍,再判断结果。后来实现不了,百度了一下。用回溯法解决了遍历的问题,在此记录一下。
代码如下:
class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer> res=new ArrayList<>();
List<Integer> temp=new ArrayList<>();
function_sum(res,temp,k,n,1)//1为遍历的起始数
return res;
}
private void function_sum(List<List<Integer> res,List<Integer> temp,int k,int n,int from)
{
if(n<0)
{
return;
}
if(k==0)
{
if(n==0)//满足条件
{
res.add(new ArrayList<>(temp));//需要new一个list
}
return;
}
for(int i=9;i>=from;i--)
{
temp.add(i);
function_sum(res,temp,k-1,n-i,i+1);
temp.remove(temp.size()-1)//这一步有点懵了
}
/**
*还有一种写法
*for(int i=from,i<=9-k+1;i++)
*{
* temp.add(i);
* function_sum(res,temp,k-1,n-i,i+1);
* temp.remove(temp.size()-1)
*}
*9-k+1为啥是他,也有点懵
*/
}
}
本文介绍了解决力扣每日一题216题——组合总和III的方法。通过使用回溯法,实现了找出所有总和为n的k个数的组合,组合中只允许有1-9的正整数,且组合里不能有重复的数字。
3394

被折叠的 条评论
为什么被折叠?



