给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public class Main {
public static int ans = 0;
public static int min_diff = 50000;
public static void main(String[] args) {
// TODO 自动生成的方法存根
// Scanner input = new Scanner(System.in);
int nums[] = {0,0,0};
int target = 1;
dfs(nums, 0, 0, 0, target);
System.out.println(ans);
}
static void dfs(int[] nums, int i, int sum, int cout, int target) {
if (cout == 3) {
int diff = Math.abs(target - sum);
if (diff < min_diff) {
min_diff = diff;
ans = sum;
}
return;
}
if (i >= nums.length) {
return;
}
dfs(nums, i+1, sum+nums[i], cout+1, target);
dfs(nums, i+1, sum, cout, target);
}
}
这题感觉和组合的输出那题类似,但因为力扣限定了传入的数据类型,所以感觉不太好按“使用过的数据赋值为0”方式来写。如果暴力求解的话,直接三重for循环。
int sum = nums[i] + nums[j] + nums[k];
if(Math.abs(target - ans) >= Math.abs(target - sum))
ans = sum;
提交后只能过10个点,错误报告如下,有点迷,怎么可能输出2?我怀疑是static搞得,但没想到解决的办法