第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LeetCode 排列 - 堆棧溢出錯誤

LeetCode 排列 - 堆棧溢出錯誤

Go
忽然笑 2022-05-23 17:33:50
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遞歸調用兩次,依此類推。


查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 254 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號