你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24。
示例 1:
输入: [4, 1, 8, 7]
输出: True
解释: (8-4) * (7-1) = 24
代码
class Solution {public boolean judgePoint24(int[] nums) {List<Double> list=new ArrayList<>();for (int c:nums) list.add((double)c);//将4个数加入listreturn getJudgePoint24(list);}public boolean getJudgePoint24(List<Double> list) {if(list.size()==0) return false;//没有符合的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){List<Double> temp=new ArrayList<>();for(int k=0;k<list.size();k++)//将剩余的数字加入下一层list{if(k!=i&&k!=j)temp.add(list.get(k));}for(int k=0;k<4;k++)//运算选出的两个数,并将结果加入list{if(k<2&&j>i) continue;if(k==0) temp.add(list.get(i)+list.get(j));if(k==1) temp.add(list.get(i)*list.get(j));if(k==2) temp.add(list.get(i)-list.get(j));if(k==3){if(list.get(j)==0) continue;//分母不能为0temp.add(list.get(i)/list.get(j));}if(getJudgePoint24(temp)) return true;temp.remove(temp.size()-1);//回溯}}}return false;}
}