我正在尝试学习递归,并通过斯坦福大学在线视频讲座和教科书进行学习。在编程练习中,提出一个问题以生成给定索引的字符串的所有排列。例如“ ABCD”和索引2。这将生成“ ABCD”和“ ABDC”。
我知道如何使用来生成排列,func permute(prefix, suffix)但是这个问题使我感到困惑。这是我到目前为止想要的:
func permute(s string) {
permuteHelper(s, 2)
}
func permuteHelper(s string, idx int) {
if idx == 0 {
fmt.Println(s)
return
}
for i := idx; i < len(s); i++ {
newS := s[:idx]
suffix := s[idx : idx+1]
newS += suffix
permuteHelper(newS, idx-1)
}
}
output:
AB
AB
AB
AB
我不想要答案,但是我的思维过程中可能需要一些指导。我知道我应该创建一个静态的“ AB”,然后在一次迭代中选择“ C”,然后选择“ D”,然后应该触发我的基本情况并打印字符串。然后,控制权将返回到“ AB”,“ i”应为3,然后选择“ D”,但是如何选择“ C”呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。