排列组合(密码本)-求指定个数的字母或数字的的任意排列组合

最近要做一个密码本,列出所有电话号码的可能组合

也就是指定个数的数字的所有组合

比如(0, 1, 2) 列出这三个数字的任意组合,组合长度为3: 000,001,002,100,101,102.....

需要一个算法,特此记录

使用递归完成,随着可选数字的增多,需要的时间也大大增加,当需要11电话号码的所有组合,则有10的10次方,10000000000种可能,

(因为电话号码第一位为1),在我的个人电脑上,我计算大致需要34个小时才能跑完,写入文件中大致有200多G

后面要过滤(0,2,6,9)这几种可能,因为电话号码第二位不存在这几个数字,会减少不少数据

下面是go代码的算法实现

package main

func main() {
        // 四位的所有组合
	sli := []string{"3", "5", "7", "8"}
	cast(sli, 0, "")
}

func cast(sli []string, s int, str string) {
	if s != len(sli)-1 {
		for i := 0; i < len(sli); i++ {
			strtmp := str + sli[i]
			cast(sli, s+1, strtmp)
		}
	} else {
		for i := 0; i < len(sli); i++ {
			println(str + sli[i])
		}

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值