2 回答
TA贡献2039条经验 获得超7个赞
如果您将整数转换为字符串,那么我认为会更容易。
func PrintSubSequence(digits string, tmp string, idx int, sz int) {
if len(tmp) == sz { // if size reach then print
fmt.Println(tmp)
return
}
// here idx indicate in tmp string we already use till idx-1
for i := idx; i < len(digits); i++ {
tmp2 := tmp + string(digits[i]) // Add new digit in new variable to pass in recursion without change current tmp
PrintSubSequence(digits, tmp2, i+1, sz)
}
}
func main() {
PrintSubSequence(strconv.Itoa(21025), "", 0, 2) // Convert interger into string
}
TA贡献1886条经验 获得超2个赞
算法在这里: -
您需要从每个数字的角度进行思考。因此,当您生成子序列时,一个数字可以是子序列的一部分,也可以不是。
当你考虑一个特定的数字时,增加一个计数器(比如 currentLength)。将到目前为止形成的序列添加到 Set 以避免重复。
如果 currentLength 计数器已达到您给定的最大长度,则停止当前子序列的形成。
移动到下一个序列形成。
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报