題目:
給乙個包含n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c,使得三數相加=0? 請找出所有滿足條件的不重複的三元組
例項:nums = [-1,0,1,2,-1,-4];
滿足條件的三元組為:
[[-1,0,1],
[-1,-1,2]
]`
class
solution
:def
threesum
(self, nums: list[
int])-
> list[list[
int]]:
l =len(nums)
nums.sort(
)
res =
if l <
3or nums[0]
>
0or nums[l-1]
<0:
return res
for i in
range
(l):
if nums[i]
>0:
break
if i >
0and nums[i]
== nums[i-1]
:continue
j = i +
1
r = l -
1while j < r:
if nums[i]
+ nums[j]
+ nums[r]==0
:
temp =
[nums[i]
,nums[j]
,nums[r]
]
while j < r and nums[j]
== nums[j+1]
:
j +=
1while j < r and nums[r]
== nums[r-1]
:
r -=
1
j +=
1
r -=
1elif nums[i]
+ nums[j]
+ nums[r]
>
0:
r -=
1elif nums[i]
+ nums[j]
+ nums[r]
<
0:
j +=
1return res
1、排序後,因為和是0 ,所以當陣列遍歷到正數時,就沒有遍歷的必要了;
2、使用三個指標i,j,r:
1)i從陣列頭遍歷到正數為止, 對於每乙個i ,找j,和看有無三數和為0的情況;
2)j初始從i+1開始,r從陣列尾部開始,遍歷,如果三數和=0,將三指標對應的數加入答案中,並進行去重(分別檢查j和r定位到不重複的地方)
3)如果三數之和<0,j前進 和》0,r後退
leecode python中檔題 2 兩數相加
給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。definition for singly linked list.c...
leecode python簡單題 7 整數反轉
給你乙個 32 位的有符號整數 x 返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 231,231 1 就返回 0。假設環境不允許儲存 64 位整數 有符號或無符號 class solution def reverse self,x int int num 0 ...
兩數,三數之和
列舉陣列中所有可能的互不相同的三元組使其和為0 排序 雙指標 先不考慮時間複雜度,最簡單的想法是列舉所有三元組 for i in range n for j in range i 1 n for k in range j 1 n a i a j a k 這樣會有重複,那什麼導致了重複呢?無非是兩種情...