题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int[]nums=new int[4]; for(int i=0;i<4;i++) nums[i]=in.nextInt(); boolean[]vis=new boolean[4]; boolean ans=false; //这里只需要一次递归即可,在递归里面for循环判断 if(dfs(vis,nums,0)) System.out.println(true); else System.out.println(false); } public static boolean dfs(boolean[]vis,int[]nums,int cur) { boolean four=true; for(int i=0;i<4;i++) { //判断是否四个数都访问完了 if(!vis[i]){ four=false; break; } } if(four) return cur==24;//返回是否为24 for(int i=0;i<nums.length;i++) { if(!vis[i]) { vis[i]=true;//标记这个数字为已经访问 if(dfs(vis,nums,cur+nums[i])|| dfs(vis,nums,cur-nums[i])||dfs(vis,nums,cur*nums[i]) ||nums[i]!=0&&cur%nums[i]==0&& dfs(vis,nums,cur%nums[i])) return true; vis[i]=false;//回溯 } } return false;//如果走出了所有的,说明不存在24点,返回false } }