题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
通过递归判断list中的元素能否通过+-*/运算得到特定的数字n,从list中取出值和n进行+-*/运算以得到新的n值,再用移除该值得新list和新n进行递归判断,判断条件是list中只剩余一个元素,且该元素的值为n。
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List<Integer> list = new ArrayList<>(); for (int i = 0; i < 4; i++) { list.add(sc.nextInt()); } System.out.println(computeNum(list, 24)); } //判断列表list中的元素能否通过运算得到数字n public static boolean computeNum(List<Integer> list, int n) { if (list.size() == 1) { return list.get(0) == n; } //循环遍历列表中的值 for (int i = 0; i < list.size(); i++) { int k = list.get(i); //用一个临时列表储存其它的值 List<Integer> tempList = new ArrayList<>(list); tempList.remove(i); //用临时列表 和 n与遍历的值k进行(+-*/)运算得出的新值 进行递归调用 if (computeNum(tempList, n + k)) { return true; } if (computeNum(tempList, n - k)) { return true; } if (computeNum(tempList, n * k)) { return true; } if (n % k == 0 && computeNum(tempList, n / k)) { return true; } } return false; } }