YNZH's Blog

24 Game

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.*;

/**
* 题目地址:https://leetcode.com/problems/24-game/
* 思路:每次从数组中任意选择两个元素进行运算,使得原数组大小减一,
* 递归的进行上述操作,知道只剩下一个元素判断是否为24即可。
*/

public class Solution {
/**
* @param arr int整型一维数组
* @return bool布尔型
*/
private double eps = 1e-6;

public boolean Game24Points(int[] arr) {
// write code here
if (arr == null || arr.length < 2) return false;
List<Double> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
list.add(arr[i] * 1.0);
}
return isValid24(list);
}

public boolean isValid24(List<Double> list) {
if (list.size() == 1) return Math.abs(list.get(0) - 24) < eps;
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < i; j++) {
double p = list.get(i), q = list.get(j);
List<Double> d = new ArrayList<>();
d.add(p + q);
d.add(p - q);
d.add(q - p);
d.add(p * q);
if (q > eps) d.add(p / q);
if (p > eps) d.add(q / p);
list.remove(i);
list.remove(j);
for (Double aDouble : d) {
list.add(aDouble);
if (isValid24(list)) {
return true;
}
list.remove(list.size()-1);
}
//注意这里只能先添加j,然后添加i,不然会越界而且list无法还原 。
list.add(j,q);
list.add(i,p);
}
}
return false;
}

public static void main(String[] args) {
int[] arr = new int[]{7, 2, 1, 10};
System.out.println(new Solution().Game24Points(arr));
}
}

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。
载入天数...载入时分秒...