标签:sharp script ble example nbsp har 而不是 you compute
2020-04-04 19:46:42
问题描述:
你有 4 张卡片, 每一张上面都有一个 1 到 9 的数字. 你需要判断是否能用运算符 *, /, +, -, (, ) 来计算得到 24
样例
样例 1:
输入:[1, 4, 8, 7] 输出:true 解释:8 * (7 - 4) * 1 = 24
样例 2:
输入:[1, 1, 1, 2] 输出:false 解释:无法得到24
样例 3:
输入:[3, 3, 8, 8] 输出:true 解释:8 / ( 3 - 8 / 3) = 24
注意事项
除法运算符 / 是真正的除法, 而不是整数除法. 所以 4 / (1 - 2 / 3) = 12.
所有的运算符位于两个数字之间. 尤其是, 我们不能将 - 当做一个一元运算符. 比如说, 输入为[1, 1, 1, 1], 表达式 - 1 - 1 - 1 - 1 是不允许的
你不能将数字 串联 起来. 比如, 如果输入为 [1, 2, 1, 2], 我们不能写成 12 + 12
问题求解:
直接暴力搜索。
public boolean compute24(double[] nums) {
// write your code here
return compute(nums, 4);
}
public boolean compute(double[] nums, int n) {
if (n == 1) {
if (Math.abs(nums[0] - 24) <= 1E-6) return true;
else return false;
}
for(int i = 0; i < n; i ++) {
for (int j = i + 1; j < n; j++) {
double a, b;
a = nums[i];
b = nums[j];
nums[j] = nums[n - 1];
nums[i] = a + b;
if (compute(nums, n - 1)) {
return true;
}
nums[i] = a - b;
if (compute(nums, n - 1)) {
return true;
}
nums[i] = b - a;
if (compute(nums, n - 1)) {
return true;
}
nums[i]=a * b;
if (compute(nums, n - 1)) {
return true;
}
if (b != 0){
nums[i] = a / b;
if(compute(nums, n - 1)) {
return true;
}
}
if (a != 0){
nums[i] = b / a;
if(compute(nums, n - 1)) {
return true;
}
}
nums[i] = a;
nums[j] = b;
}
}
return false;
}
标签:sharp script ble example nbsp har 而不是 you compute
原文地址:https://www.cnblogs.com/hyserendipity/p/12633722.html