classSolution{List<List<Integer>> list_all =newArrayList();List<Integer> list =newArrayList();publicList<List<Integer>>combinationSum3(int k,int n){backtrack(k, n,1);return list_all;}voidbacktrack(int k,int n,int start){if(list.size()== k){int sum =0;for(int i =0; i < list.size(); i++){
sum += list.get(i);}if(sum == n){
list_all.add(newArrayList(list));}return;}for(int i = start; i <=9-(k - list.size())+1; i++){
list.add(i);backtrack(k, n, i +1);
list.remove(list.size()-1);}}}
代码逐行解析版
classSolution{List<List<Integer>> list_all =newArrayList();List<Integer> list =newArrayList();publicList<List<Integer>>combinationSum3(int k,int n){backtrack(k, n,1);//回溯return list_all;}voidbacktrack(int k,int n,int start){if(list.size()== k){//list列表为k个数时int sum =0;//创建sum来统计相加之和for(int i =0; i < list.size(); i++){//将列表所有的数相加
sum += list.get(i);}if(sum == n){//如果sum和n相等
list_all.add(newArrayList(list));//添加到结果链表}return;//返回}for(int i = start; i <=9-(k - list.size())+1; i++){
list.add(i);//将i添加到列表backtrack(k, n, i +1);//回溯
list.remove(list.size()-1);//列表删掉最后一个元素}}}