给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
void my_dfs(vector<int>& nums, int target, int cur, int sum, int od, int& sumClosest) {
if (od > 3)
return;
if (od == 3) {
if (abs(sum - target) < abs(sumClosest - target))
sumClosest = sum;
return;
}
int tmp = 0;
for (int i = cur; i < nums.size(); ) {
my_dfs(nums, target, i + 1, sum + nums[i], od + 1, sumClosest);
tmp = nums[i];
while (++i < nums.size() && nums[i] == tmp);
}
}
int threeSumClosest(vector<int>& nums, int target) {
//assert(nums.size() > 2);
std::sort(nums.begin(), nums.end());
int sumClosest = nums[0] + nums[1] + nums[2];
my_dfs(nums, target, 0, 0, 0, sumClosest);
return sumClosest;
}