合作网站账号登录方式,网站流量大小对网站有什么影响,深圳市住房和建设局官网房源,注册查询官方网站文章目录1. 题目2. 解题1. 题目
你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *#xff0c;/#xff0c;#xff0c;-#xff0c;(#xff0c;) 的运算得到 24。
示例 1:
输入: [4, 1, 8, 7]
输出: True
解释: (8-4) * (7-1) 24示例 2:
输入: [1, 2, 1, 2]
输…
文章目录1. 题目2. 解题1. 题目
你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 */-() 的运算得到 24。
示例 1:
输入: [4, 1, 8, 7]
输出: True
解释: (8-4) * (7-1) 24示例 2:
输入: [1, 2, 1, 2]
输出: False注意:
除法运算符 / 表示实数除法而不是整数除法。
例如 4 / (1 - 2/3) 12 。每个运算符对两个数进行运算。特别是我们不能用 - 作为一元运算符。
例如[1, 1, 1, 1] 作为输入时表达式 -1 - 1 - 1 - 1 是不允许的。你不能将数字连接在一起。
例如输入为 [1, 2, 1, 2] 时不能写成 12 12 。来源力扣LeetCode 链接https://leetcode-cn.com/problems/24-game 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
将数组转为 double每次选取两个数进行运算直至数字只有1个检查其跟24的误差是否足够小
class Solution {bool can false;
public:bool judgePoint24(vectorint nums) {vectordouble number(4);for(int i 0; i 4; i)number[i] double(nums[i]);check(number);return can;}void check(vectordouble nums) {if(can) return;if(nums.size() 1){if(fabs(nums[0]-24) 1e-6)can true;return;}for(int i 0; i nums.size(); i){for(int j 0; j nums.size(); j){if(i j)continue;vectordouble temp;for(int k 0; k nums.size(); k)if(k ! i k ! j)temp.push_back(nums[k]);//剩余数字直接放进数组for(int k 0; k 4; k){if(k 2 i j)continue;// * 法满足交换律if(k 0)temp.push_back(nums[i]nums[j]);else if(k 1)temp.push_back(nums[i]*nums[j]);else if(k 2)temp.push_back(nums[i]-nums[j]);elsetemp.push_back(nums[i]/nums[j]);check(temp);temp.pop_back();//回溯}}}}
};32 ms 9.2 MB 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步