做网站青岛,汽车电商网站建设,品牌建设是指什么的行为过程,建设返利网站组合#xff08;Leetcode77#xff09; 思路 用递归每次遍历从1-n得数#xff0c;然后list来记录是不是组合到k个了#xff0c;然后这个每次for循环的开始不能和上一个值的开始重复#xff0c;所以设置个遍历开始索引startindex
class Solution {static ListListLeetcode77 思路 用递归每次遍历从1-n得数然后list来记录是不是组合到k个了然后这个每次for循环的开始不能和上一个值的开始重复所以设置个遍历开始索引startindex
class Solution {static ListListInteger result;static ListInteger list;static int q;public static ListListInteger combine(int n, int k) {result new ArrayList();list new ArrayList();q k;dfs(n,k,1);return result;}public static void dfs(int n,int k,int startIndex){if(list.size()k){result.add(new ArrayList(list));return;}for (int i startIndex;in - (k - list.size()) 1;i){ //优化list.add(i);dfs(n,k,i1);list.remove(list.size()-1);}}
}
组合总和Leetcode216
1、为每个位置遍历一个数用startIndex来防止重复2、用sum来记录当前的总和 如果已经超过了则return 如果存入的数已经达到k个就判断sum是否等于n然后返回
class Solution {static ListListInteger result;static ListInteger list;public ListListInteger combinationSum3(int k, int n) {result new ArrayList();list new ArrayList();dfs(n,k,1,0);return result;}public static void dfs(int n,int k,int startIndex,int sum){if(sumn){//当前组合已经大于sum 不可能再等于n了 直接returnreturn;}if(list.size()k){if (sumn){ //判断是否sumnresult.add(new ArrayList(list));}return;}for(int i startIndex;i9-(k-list.size())1;i){ 从start开始防止重复list.add(i);dfs(n,k,i1,sumi); //每次记录总和 list.remove(list.size()-1);}}
}