前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode216. 组合总和 III

LeetCode216. 组合总和 III

作者头像
mathor
发布2018-07-24 15:28:36
2210
发布2018-07-24 15:28:36
举报
文章被收录于专栏:mathormathor
image
image

 简单的dfs问题,标记每一个数用没用过,没用过就用,v[i]=true,k--,n-=i,然后回溯就只需要将他们还原就行,注意这里是不能重复选,因此下一次选择的应该比这次要大,所以循环每次的初值是i=idx+1

代码语言:javascript
复制
class Solution {
    public List<List<Integer>> ans = new ArrayList<List<Integer>>();
    public boolean[] v = new boolean[11];
    public void dfs(int idx,int k,int n) {
        if(n < 0 || idx > 9 || k < 0)
            return;
        if(n == 0 && k == 0) {
            List<Integer> tmp = new ArrayList<Integer>();
            for(int i = 1;i < 10;i++) 
                if(v[i])
                    tmp.add(i);
            ans.add(tmp);
        }
        for(int i = idx + 1;i < 10;i++) {
            if(!v[i]) {
                v[i] = true;
                --k;
                n -= i;
                dfs(i,k,n);
                v[i] = false;
                ++k;
                n += i;
            }
        }
    }
    public List<List<Integer>> combinationSum3(int k, int n) {
        ans.clear();
        dfs(0,k,n);
        return ans;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档