题解 | #24点游戏算法#

24点游戏算法

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

package org.example.test.practice;

import com.alibaba.fastjson.JSONObject;

import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Scanner;

public class Main {

static boolean[] vis;
static LinkedList<Integer> path = new LinkedList<>();
static boolean ans;

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextInt()) {
        int[] num = new int[4];
        for (int i = 0; i < 4; i++) {
            num[i] = scanner.nextInt();
        }
        Arrays.sort(num);
        vis = new boolean[4];
        ans = false;
        dfs(num, 0);
        System.out.println(ans);
    }

}

/**
 * 回溯算法
 *
 * @param num
 * @param target
 */
private static void dfs(int[] num, int target) {
    if (path.size() == num.length && target == 24) {
        ans = true;
        System.out.println(JSONObject.toJSONString(path));
        return;
    }
    for (int i = 0; i < num.length; i++) {
        if (vis[i] || i > 0 && num[i - 1] == num[i] && !vis[i - 1]) {
            continue;
        }
        vis[i] = true;
        path.add(num[i]);
        if (path.size() == 1) { // 很重要
            dfs(num, num[i]);
        } else if (path.size() > 1) {
            dfs(num, target - num[i]);
            dfs(num, target + num[i]);
            dfs(num, target * num[i]);
            if (target % num[i] == 0) // 很重要
                dfs(num, target / num[i]);
        }
        path.removeLast();
        vis[i] = false;
    }
}

}

全部评论

相关推荐

想顺利毕业的猕猴桃在看牛客:好几个月没面试了,腾讯留面评吗
点赞 评论 收藏
分享
01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务