只通过 *, /, +, -, (, ) 解24点,除法计算结果如果有小数不舍弃小数位。
Input: [4, 1, 8, 7] Output: True Explanation: (8-4) * (7-1) = 24test case
[4,1,8,7] [5,5,5,1] [1,2,1,9] [1,2,1,2] [1,2,3,4] [8,1,6,6] [3,4,6,7]WA了3次才AC,思路回溯,解1写的不好,重新写了解2,思路和解1差不多。
// Runtime: 2 ms, faster than 87.79% of Java online submissions for 24 Game. //Memory Usage: 36.7 MB, less than 5.30% of Java online submissions for 24 Game. public boolean judgePoint24(int[] nums) { List<Integer> candidates = new ArrayList<>(); Collections.addAll(candidates, nums[0], nums[1], nums[2], nums[3]); int a = candidates.remove(0); int b; for (int i = 0; i < 3; i++) { b = candidates.remove(0); if (helper(candidates, a + b, 24) || helper(candidates, (double) a - b, 24) || helper(candidates, (double) b - a, 24) || helper(candidates, (double) a * b, 24) || helper(candidates, (double) b / a, 24) || helper(candidates, (double) a / b, 24)) { return true; } candidates.add(b); } candidates.add(a); for (int i = 0; i < 4; i++) { a = candidates.remove(0); if (helper(candidates, a, 24)) return true; candidates.add(a); } return false; } private boolean helper(List<Integer> candidates, double k, double target) { if (candidates.size() == 0) { return Math.abs(target - k) < 0.0001; } for (int i = 0; i < candidates.size(); i++) { int a = candidates.remove(0); if (helper(candidates, a, target + k) || helper(candidates, a, target - k) || helper(candidates, a, k - target) || (k != 0 && helper(candidates, a, target * k)) || (k != 0 && helper(candidates, a, target / k)) || (k != 0 && helper(candidates, a, k / target))) { return true; } candidates.add(a); } return false; }