描述
给出含有n个整数的数组s,找出s中和加起来的和最接近给定的目标值的三个整数。返回这三个整数的和。你可以假设每个输入都只有唯一解。
例如,给定的整数 S = {-10 20 10 -40}, 目标值 = 10. 最接近目标值的和为 2. (-10 + 20 + 10 = 20).
示例1
输入:
[0,0,0],1
复制返回值:
0
class Solution {
public:
int threeSumClosest(vector<int> &nums, int target) {
sort(nums.begin(),nums.end());
int k = 3;
int res;
for(int i=0;i<nums.size();i++){
res+=nums[i];
}
vector<int> path;
dfs(nums,path,target,k,0,res);
return res;
}
private:
void dfs(vector<int>& nums,vector<int> &path,
int target,int k,int start,int &res)
{
if(path.size()==k){
int t=0;
for(int i=0;i<path.size();i++){
t+=path[i];
}
if(abs(t-target)<abs(res-target)){
res=t;
}
}
else{
for(int i=start;i<nums.size();i++){
path.push_back(nums[i]);
dfs(nums,path,target,k,i+1,res);
path.pop_back();
}
}
}
};