LeetCode:求正整数n的选取k个的组合

题目描述:
给定一个正整数n和一个整数k,求在1到n中选取k个数字的所有组合方法。

示例:
Input:n=4,k=2
Output:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]
这里二维数组的每个维度都可以以任意顺序输出

解题思路:
利用简单的回溯法即可

Go语言实现

package main

import "fmt"

func combine(n,k int)(ans [][]int){
	comb:=make([]int,k)
	count:=0
	backtracking(&ans,comb,count,1,n,k)
	return
}

func backtracking(ans *[][]int,comb []int,count,pos,n,k int){
	if count==k{
		/*切片做函数参数时,append增加元素时,相当于创建一个新的变量,因此用指针传递*/
		*ans=append(*ans,append([]int{},comb...)) /*"..."在切片或数组是打散,变成单个*/
		return
	}
	for i:=pos;i<=n;i++{
		comb[count]=i
		count++
		backtracking(ans,comb,count,i+1,n,k)
		count--
	}
}
func main(){
	fmt.Println("求k个数字的所有组合方法")
	fmt.Println(combine(4,2))
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路上的追梦人

您的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值