题解 | #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;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务