题解 | #牛牛的三元组问题#
牛牛的三元组问题
https://www.nowcoder.com/practice/72c6d735fb1144a2ba162976a4510839
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型vector<vector<>>
*/
int jumptodiff(vector<int>& nums,int index) {
int temp = nums[index];
while (index < nums.size() && temp == nums[index]) {
++index;
}
return index;
}
void find_res(vector<vector<int>>& res, vector<int>& subres, vector<int>& nums, int sum, int index) {
if (subres.size() == 3 && sum == 0) {
res.push_back(subres);
return;
}
else if (subres.size() == 3 && sum != 0) {
return;
}
if (index < nums.size()) {
// contain index
subres.push_back(nums[index]);
sum += nums[index];
find_res(res, subres, nums, sum, index + 1);
subres.pop_back();
sum -= nums[index];
// ignori index, jump to different value
int index_next = jumptodiff(nums, index);
find_res(res, subres, nums, sum, index_next);
}
return;
}
vector<vector<int>> findTriplets(vector<int>& nums) {
// write code here
sort(nums.begin(), nums.end());
// recursion
vector<vector<int>> res;
vector<int> subres;
find_res(res, subres, nums, 0, 0);
return res;
}
};
