输入: cards = [4, 1, 8, 7]
输出: true
class Solution {
// 把选的两个数删除,并且添加新的结果
public List<Double> get(List<Double> list, int i, int j, Double x) {
List<Double> res = new ArrayList<>();
for (int k = 0; k < list.size(); k++) {
if (k != i && k != j) {
res.add(list.get(k));
}
}
res.add(x);
return res;
}
public boolean dfs(List<Double> list) {
// 如果最后只有一个数了,就判断这个数是否是24
if (list.size() == 1) {
return Math.abs(list.get(0) - 24) < 1e-6;
}
// 从中随意挑选两个数
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (i != j) {
Double a = list.get(i);
Double b = list.get(j);
// 判断这两个数相加行吗
if( dfs(get(list ,i, j, a + b))) return true;
// 判断这两个数相减行吗
if( dfs(get(list, i, j, a - b))) return true;
// 判断这两个数相乘行吗
if( dfs(get(list, i, j, a * b))) return true;
// 判断这两个数相除行吗
if( b!=0.0 && dfs(get(list, i, j, a / b))) return true;
}
}
}
// 都不行
return false;
}
public boolean judgePoint24(int[] cards) {
List<Double> list = new ArrayList<>();
for (int i = 0; i < cards.length; i++) {
list.add((double)cards[i]);
}
return dfs(list);
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容