給定數組 num 和目標值 target,找出所有不重複的四元組 [a,b,c,d] 使和為 target。四元組內非遞減,結果不重複。
i 遍歷第一個數,去重:i>0 && num[i]==num[i-1] continue。j 遍歷第二個數(j>i),同樣去重。l=j+1, r=n-1 尋找第三、四個數。sum = num[i]+num[j]+num[l]+num[r]。
sum == target:加入答案,l++ 跳過重複,r-- 跳過重複。sum < target:l++ 跳過重複。sum > target:r-- 跳過重複。
vector> fourSum(vector& num, int target) {
vector> res;
int n = num.size(); if(n<4) return res;
sort(num.begin(), num.end());
for(int i=0;i0 && num[i]==num[i-1]) continue;
for(int j=i+1;ji+1 && num[j]==num[j-1]) continue;
int l=j+1, r=n-1;
while(l
時間 O(n^3),空間 O(1)(不計輸出)。去重邏輯確保結果唯一。n≤200 時可通過。