题解 | #24点游戏算法#
非常典型的一道dfs的题,通过dfs递归调用解决遍历问题。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
boolean enable = false; // 保存是否已经找到等于24的表达式
int[] nums = new int[4]; // 存储4个数字
boolean[] visit = new boolean[4]; // 存储4个数字的访问状态
String[] arr = sc.nextLine().trim().split(" ");
for (int i = 0; i < 4; i++) {
nums[i] = Integer.parseInt(arr[i]);
}
for (int i = 0; i < 4; i++) {
visit[i] = true;
if (dfs(nums, visit, nums[i])) {
enable = true;
break;
}
}
System.out.println(enable);
}
}
public static boolean dfs(int[] nums, boolean[] visit, int tmp) {
for (int i = 0; i < nums.length; i++) {
if (!visit[i]) {
visit[i] = true; // 将一个未访问过的位置置于访问状态
// 递归调用dfs,本质就是暴力搜索
if (dfs(nums, visit, tmp - nums[i])
|| dfs(nums, visit, tmp + nums[i])
|| dfs(nums, visit, tmp * nums[i])
|| (tmp % nums[i] == 0 && dfs(nums, visit, tmp - nums[i]))) {
return true;
}
visit[i] = false; // 回溯
}
}
if (tmp == 24) {
return true;
}
return false;
}
}

海康威视公司福利 1149人发布
