https://leetcode.com/problems/permutations/discuss/18239/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partioning)根據上面的帖子(排列),我想用他的算法在 Go 中覆蓋它。但是有一個堆棧溢出錯誤發(fā)生。下面是我的代碼??梢詭臀医鉀Q這個問題,thx。package mainimport ( "fmt")func main() { nums := []int{1, 2, 3} ans := permute(nums) fmt.Println(ans)}func permute(nums []int) [][]int { result := make([][]int, 0) tempAry := make([]int, 0) backtrack(&result, tempAry, nums) return result}func backtrack(result *[][]int, temp []int, nums []int) { if len(nums) == len(temp) { *result = append(*result, temp) } else { for i := 0; i < len(nums); i++ { if binarySearch(nums[i], temp) != -1 { continue } else { temp = append(temp, nums[i]) backtrack(result, temp, nums) temp2 := temp[0 : len(temp)-2] temp = temp2 } } }}func binarySearch(target int, array []int) int { low := 0 high := len(array) - 1 for high > low { mid := (high + low) / 2 if array[mid] > target { high = mid - 1 } else if array[mid] < target { low = mid + 1 } else { return mid } } return -1}
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
正在發(fā)生的是無限遞歸。這會導致堆棧溢出,因為函數返回地址和函數的參數占用堆棧空間。
問題來自循環(huán):當第三級遞歸(附加 3 的那個)返回時,它從切片中刪除了 2 和 3。所以上一個級別,應該完成它的第二次迭代,會看到 3 丟失了,所以它會backtrack
再次調用,但是那個會看到 3 丟失了,但是當它回來時 2 和 3 丟失了,所以它將再backtrack
遞歸調用兩次,依此類推。
- 1 回答
- 0 關注
- 254 瀏覽
添加回答
舉報
0/150
提交
取消