我正在尝试学习递归并浏览斯坦福在线视频讲座和教科书。在编程练习中,提出了一个问题,以生成给定索引的字符串的所有排列。例如"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",然后我的基本情况应该被触发并打印字符串。控件然后会回到应该是3和我选择"AB"的,但是我怎么选择呢?"i""D""C"
一只名叫tom的猫
相关分类