【问题标题】:golang - string permutation - slice bounds out of rangegolang - 字符串排列 - 切片边界超出范围
【发布时间】:2016-10-29 04:03:28
【问题描述】:

Here 是解决此问题的 Go Playground 代码。

我正在尝试使用递归编写一个 golang 字符串排列。
置换函数有两个参数,前缀是一个空字符串 (""),str 是“abc”。代码如下

func main() {
    str := "abc"
    perm("", str)
}

func perm(prefix string, str string) {
    n := len(str)
    fmt.Println(n)
    if n == 0 {
        fmt.Println(prefix)
    } else {
        for i := 0; i < n; n++ {
            perm(prefix+str[i:i+1], str[0:i]+str[(i+1):n])
        }
    }
}

当我运行此代码时,我按预期显示 n 的值为 3,2,1,0。
我成功获得“abc”,但随后出现“panic: runtime error: slice bounds out of range”错误。

它从不显示第二轮 3,2,1,0,因此它甚至没有达到 b 组合。我觉得如果错误发生在它到达字符串的c 部分但由于它甚至没有到达b 部分,我不确定是什么问题。

【问题讨论】:

  • 注意:始终使用格式化代码(请参阅 Playground 页面上的“格式化”按钮)

标签: string go permutation indexoutofboundsexception


【解决方案1】:

简单:

for i := 0; i < n; n++ {
                   ^^^
                    ?

n 替换为i,它应该从0 变为n-1

Resulting playground.

【讨论】:

  • 啊,我不敢相信我错过了!谢谢,我非常关注递归行,因为这是编译器告诉我的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2018-09-11
  • 2021-12-30
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多