77.组合

题目描述

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

思路

1.这道题可以使用回溯思想求解。
2.首先确定一个元素将其加入到容器中,然后对于其他元素也进行相同操作。
3.当容器内的元素等于k时便是递归结束的条件。
4.进行回溯操作,将原先确定的元素从容器内移除。

Java代码实现

    public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> res = new ArrayList<>();
        combine(1,n,k,res,new ArrayList<>());
        return res;
    }

    private void combine(int start,int n,int k,List<List<Integer>> res,List<Integer> cur) {
        //递归出口
        if(cur.size() == k){
            res.add(new ArrayList(cur));
            return ;
        }

        for (int i = start; i <= n; i++) {
            //固定该元素
            cur.add(i);
            //寻找k-1个其他元素的组合
            combine(i+1,n,k,res,cur);
            //回溯
            cur.remove(cur.size()-1);
        }
    }

Golang代码实现

func combine(n int, k int) [][]int {
    res := make([][]int,0)
    combineDG(1,n,k,[]int{},&res)
    return res
}

func combineDG(cur int,n int,k int,curNum []int, res *[][]int){
    if k == 0{
        copyNum := make([]int,len(curNum))
        copy(copyNum,curNum)
        *res = append(*res,copyNum)
        return
    }

    for i:=cur; i<=n ; i++ {
        curNum = append(curNum,i)
        combineDG(i+1,n,k-1,curNum,res)
        curNum = curNum[0:len(curNum)-1]
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1151571次浏览 17149人参与
# 通信和硬件还有转码的必要吗 #
11202次浏览 101人参与
# 不去互联网可以去金融科技 #
20373次浏览 255人参与
# 和牛牛一起刷题打卡 #
18971次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203377次浏览 3625人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4972次浏览 30人参与
# OPPO开奖 #
19200次浏览 267人参与
# 通信硬件薪资爆料 #
265906次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2220次浏览 34人参与
# 互联网公司评价 #
97685次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25036次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454864次浏览 5124人参与
# 国企和大厂硬件兄弟怎么选? #
53903次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14644次浏览 349人参与
# 硬件人的简历怎么写 #
82286次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19397次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28087次浏览 248人参与
# 学历对求职的影响 #
161236次浏览 1804人参与
# 你收到了团子的OC了吗 #
538713次浏览 6386人参与
# 你已经投递多少份简历了 #
344216次浏览 4963人参与
# 实习生应该准时下班吗 #
96976次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63524次浏览 622人参与
牛客网
牛客企业服务