題目要求:給定 nums = [2, 7, 11, 15], target = 9因為 nums[0] + nums[1] = 2 + 7 = 9所以返回 index[0, 1]題目來源:leetcode上的sum求和個人代碼def twoSum(nums, target): l = [] # 外部棧存儲
s = 0 # 外部循環次數
for _ in nums: i = 0
s = s + 1
p = nums.pop(0)
l.append(p)
for v in nums: if v == target - p:
return [len(l) - 1, s + i] i = i + 1個人思路與問題我的想法,是取出1個元素放入外部棧,并記錄其值,然后在剩下的列表中遍歷滿足條件的元素.s,i,為了標記滿足要求的元素的序號作用.驗證過程中發現,每當我輸入print(twoSum([1,3,3,5,2],7))調試結果就會顯示None,具體就是當滿足的兩個數都在輸入列表末尾,就會出現None.python新手,請多指教.
1 回答

HUWWW
TA貢獻1874條經驗 獲得超12個贊
先上結論,問題應該出在for _ in nums:
和nums.pop(0)
同時使用。這會導致你每次迭代取的一個值是從一個不斷縮小的列表里取的。你可以debugger或者把每次循環的_
給print
出來看,你會發現每次循環都跳了一次。
順便給出一個同樣復雜度n^2但比較容易理解的solution:
def twoSum(nums, target): for i in range(len(nums)): j = i + 1 tmp = nums[i] + nums[j] if tmp == target: return [i, j] print(twoSum([1,4,3,5,2],7))
添加回答
舉報
0/150
提交
取消