在做leetcode的第39題的時候,看到網上乙個用遞迴的解法,很簡潔。於是重寫了一遍。
class solution(object):
def combinationsum(self, candidates, target):
""":type candidates: list[int]
:type target: int
:rtype: list[list[int]]
"""result,temp = ,
self.combinationsumrecu(sorted(candidates),result,0,temp,target)
return result
def combinationsumrecu(self, candidates, result, start, temp, target):
if target == 0:
while start < len(candidates) and candidates[start]<=target:
self.combinationsumrecu(candidates, result, start, temp,target-candidates[start])
temp.pop()
start += 1
if __name__ == '__main__':
print solution().combinationsum([2,3,6,7],7)
沒改前,結果是:
[[2, 2, 3], [7]]
[, ]
為什麼會這樣呢?list在這裡做了什麼工作呢?
首先,為了驗證temp每步都是乙個list,我們是使用type()函式檢視它的型別。
if target == 0:
print type(temp),temp,result
輸出為:
[2, 2, 3]
[7] [[7]]
可以看出,temp都是list。但是第二個result的結果不正確
可以將正確的值輸出對比一下
if target == 0:輸出為:print type(temp),temp,result
[2, 2, 3]
[7] [[2, 2, 3]]
可以看出,本來第二個result應該為[[2,2,3]],結果變成了[[7]].
舉個例子驗證一下:
a = [1,2]輸出結果為:b = [3,4]
print a
b.pop()
print a
[1, 2, [3, 4]]
[1, 2, [3]]
除了用list(temp)以外,還可以用temp[:]進行深拷貝。
對python append 與淺拷貝的例項講解
在做leetcode的第39題的時候,看到網上乙個用遞迴的解法,很簡潔。於是重寫了一遍。class solution object def combinationsum self,candidates,target type candidates list int type target int r...
js 淺拷貝直接賦值 js的賦值與淺拷貝 深拷貝
昨天翻了下陣列api,看到concat和slice方法,突然想到這個兩個方法是淺拷貝還是深拷貝,結果陷入了死胡同,為什麼mdn文件說是淺拷貝,但進行簡單的操作為什麼能複製成功啊,糾結半天後才弄清原由,原來我一直把賦值和深淺拷貝搞混了。首先不要把引用型別的賦值歸結為淺拷貝,深拷貝和淺拷貝只針對像 ob...
靜態補充CSS型別轉換與JS深拷貝與淺拷貝
常用的塊級元素 常用的塊級block標籤 標題標籤 水平分割線 段落無序列表 有序列表 定義列表 表單 布局標籤 塊級元素特性 常用的內聯 行內inline標籤 鏈結 換行 空標籤,不深究 加粗 傾斜 下劃線 刪除線等文字裝飾標籤 下拉列表 行內元素特性 常用的行內塊級inline block標籤 ...