Hereは、この問題のGo Playgroundコードです。golang - 文字列置換 - スライス境界が範囲外にある
再帰を使用してゴラン文字列置換を作成しようとしています。
置換関数は、空文字列(""
)とstr
( "abc
")の2つの引数をとります。コードは次のとおりです
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])
}
}
}
このコードを実行すると、期待通りに3,2,1,0が表示されます。
「abc
」が正常に取得されましたが、「panic: runtime error: slice bounds out of range
」というエラーが表示されます。
2番目の3,2,1,0を表示しないので、b
の組み合わせにも達しません。エラーが発生するのは、文字列のc
部分に到達するときですが、b
部分にも届かないため、何が間違っているかわかりません。
注:書式設定されたコードを使用してください(プレイグラウンドページの「フォーマット」ボタンを参照してください) – VonC