[問題] leetcode的permutations

看板Python作者 (雞爪)時間5年前 (2018/12/31 11:43), 5年前編輯推噓7(7021)
留言28則, 9人參與, 6年前最新討論串1/1
Hi 最近小弟在刷dfs的題型 無奈是跨領域,一直卡關... 想請教各第46題 Permutations 以下是我寫的code: class Solution(object): def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ def dfs(value): if len(value) == len(nums): res.append(value) print("value=",value) for m in nums: if m in value: continue value.append(m) dfs(value) value.remove(m) res = [] dfs([]) return res 我試著將 value 給 print 出來,答案是 [[1 2 3], [1 3 2] , [2 1 3], [2 3 1], [3 1 2], [3 2 1]] 正確 但我return的res卻是[[], [], [], [], [], []] 不知哪出了問題,懇請高手解惑 感謝! --               / ̄ ̄ ̄ ㄟ |   |            /     ㄟ |    |               |   (> )( <) < XD  |             | /// (_人_) |    |            |    \__/ ! |    |             |      ㄟ \____| -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.38.110.251 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1546227798.A.2D6.html

12/31 12:12, 5年前 , 1F
是深度優先搜尋?
12/31 12:12, 1F

12/31 12:31, 5年前 , 2F
你知道res.append(value)發生什麼事嗎
12/31 12:31, 2F

12/31 13:02, 5年前 , 3F
把value的list加進去res啊
12/31 13:02, 3F

12/31 13:28, 5年前 , 4F
要加list不是要用extend嗎
12/31 13:28, 4F

12/31 13:28, 5年前 , 5F
只看推文沒看題目的不負責任發言
12/31 13:28, 5F

12/31 14:10, 5年前 , 6F
你的答案和 res = [];return [] 有甚麼不同阿...
12/31 14:10, 6F

12/31 14:22, 5年前 , 7F
value的值不會加到res裡嗎?
12/31 14:22, 7F

12/31 14:39, 5年前 , 8F
先為上面一海的錯誤推文道歉,你的作法沒錯 只錯在appen
12/31 14:39, 8F

12/31 14:39, 5年前 , 9F
d value那邊 你只要變成append(value + [])這樣就可以了
12/31 14:39, 9F

12/31 14:42, 5年前 , 10F
你錯在你append的是value這個list而沒有做deep copy 而v
12/31 14:42, 10F

12/31 14:42, 5年前 , 11F
alue最終是一個empty list 所以你最後得到六個empty lis
12/31 14:42, 11F

12/31 14:42, 5年前 , 12F
t, 你喜歡到話可以for loop print裡面六個list的id 肯
12/31 14:42, 12F

12/31 14:42, 5年前 , 13F
定會是一樣的
12/31 14:42, 13F

12/31 14:45, 5年前 , 14F
我的作法應該也不算deep copy但因為是int type這樣基本
12/31 14:45, 14F

12/31 14:45, 5年前 , 15F
就可以了
12/31 14:45, 15F
剛剛嘗試了一下,改成res.append(value[:])也行 但其實我還是不懂為何直接append(value)會變成append一個空白的list 能否詳加說明 感恩! ※ 編輯: ed78617 (114.38.110.251), 12/31/2018 17:29:19

12/31 17:29, 5年前 , 16F
res.append(value[:])
12/31 17:29, 16F

12/31 17:38, 5年前 , 17F
你看一下 backtrack的那葛array是不是和你結算答案要加
12/31 17:38, 17F

12/31 17:38, 5年前 , 18F
進去結果的那個value arr 一樣
12/31 17:38, 18F

12/31 17:58, 5年前 , 19F
是啊,array結果一樣
12/31 17:58, 19F

12/31 18:33, 5年前 , 20F
那麼remove掉後 該array元素也跟被移除
12/31 18:33, 20F

12/31 18:42, 5年前 , 21F
所以最後backtrack完答案裡的arr元素都被移除了
12/31 18:42, 21F

12/31 18:54, 5年前 , 22F
用value+[]就可以 是因為如果copy到跟原本不同長度list
12/31 18:54, 22F

12/31 18:54, 5年前 , 23F
會用deep copy是嗎
12/31 18:54, 23F

01/01 22:54, 6年前 , 24F
你的 res 裡面六個指標都指到同一個 empty array
01/01 22:54, 24F

01/01 22:57, 6年前 , 25F
values[:],values+[],copy.copy(values) 都可以讓 r
01/01 22:57, 25F

01/01 22:57, 6年前 , 26F
es 抓到的是 values 的 shallow copy
01/01 22:57, 26F

01/01 22:59, 6年前 , 27F
(這個 case 因為 values 裡面只有字串,deep copy 和
01/01 22:59, 27F

01/01 22:59, 6年前 , 28F
shallow copy 結果應該是一樣的
01/01 22:59, 28F
文章代碼(AID): #1SAP1MBM (Python)