我正在尝试学习递归并浏览斯坦福在线视频讲座和教科书。在编程练习中提出了一个问题,即为给定索引的字符串生成所有排列。例如"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)
}
}
输出:
AB
AB
AB
AB
我不想要答案,但也许对我的思维过程有一些指导。我知道我应该创建一个静态"AB",然后"C"在一次迭代中选择,然后选择"D",然后我的基本情况应该被触发并打印字符串。然后控制会返回到"AB","i"应该是3,我选择"D",但是我该如何选择呢"C"?
青春有我
相关分类