LeetCode216:Combination Sum III

    xiaoxiao2021-12-14  21

    从1-9中取k个数和为n,且数不重复。

    首先可能想到的是用一个boolean数组记录用过的数字,Boolean数组的下标+1即为数字。但这题我们发现,选取的数组是递增的,所以无需使用一个数组记录使用过的数字,我们取一个数然后往后枚举即可,当满足条件时,将当前的答案记录到集合中即可。

    public class Solution { public List<List<Integer>> ans = new ArrayList<>(); public List<Integer> tmp = new ArrayList<>(); /** * * @param index 当前的数字 * @param k 选k个数 * @param target 所要求的和 * @param sum 目前已经得到的和 * @param tmp 临时存储 */ public void robot(int index , int k , int target,int sum,List<Integer> tmp){ //满足条件 加入答案集 if(target == sum && k==0){ ans.add(new ArrayList<>(tmp)); return; //不满足条件 跳出 }else if(sum>target || k<0) return; //index 表示当前的数字 for(int i=index; i <= 9;i++){ //加上当前的数字 tmp.add(i); //往后移动一位 sum加上当前的数字 可选取的数量k-1 robot(i+1,k-1,target,sum+i,tmp); //还原 tmp.remove(tmp.size()-1); } } public List<List<Integer>> combinationSum3(int k, int n) { ans.clear(); robot(1,k,n,0,tmp); return ans; } }
    转载请注明原文地址: https://ju.6miu.com/read-968847.html

    最新回复(0)