题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        boolean[] flag  = new boolean[4];
        while (sc.hasNext()) {
            for (int i = 0; i < 4; i++) {
                list.add(sc.nextInt());
            }
            System.out.println(dfs(list, 0, 24, flag));
        }

    }

    private static boolean dfs(List<Integer> nums, int deep, int sum, boolean[] flag) {
        if (deep == 4 && sum == 0) {
            return true;
        }
        for (int i = 0; i < 4; i++) {
            if (flag[i]) continue;

            flag[i] = true;
            if(dfs(nums, deep + 1, sum + nums.get(i), flag)) return true;
            if(dfs(nums, deep + 1, sum - nums.get(i), flag)) return true;
            if(dfs(nums, deep + 1, sum * nums.get(i), flag)) return true;
            if(sum % nums.get(i) == 0){
                if(dfs(nums, deep + 1, sum / nums.get(i), flag)) return true;
            }
            flag[i] = false;
        }
        return false;
    }

}

全部评论
找了一个例子,改了一下竟然通过了。flag数组很有必要,可以保证在同一个数之间进行轮换算符,如果进入了下一层就会被拦截,保证遍历在同一层之间进行
点赞 回复 分享
发布于 2024-02-21 14:39 重庆

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务