题解 | #24点运算#

24点运算

https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

字符串记录表达式

import java.util.HashMap;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        HashMap<String, Integer> map = new HashMap<String, Integer>(13) {
            {
                put("A", 1);
                put("2", 2);
                put("3", 3);
                put("4", 4);
                put("5", 5);
                put("6", 6);
                put("7", 7);
                put("8", 8);
                put("9", 9);
                put("10", 10);
                put("J", 11);
                put("Q", 12);
                put("K", 13);
            }
        };
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            if (str.contains("joker") || str.contains("JOKER")) {
                System.out.println("ERROR");
            } else {
                String[] cards = str.split(" ");
                boolean[] visited = new boolean[cards.length];
                boolean flag = true;
                for (int i = 0; i < cards.length; i++) {
                    visited[i] = true;
                    if (backtrack(cards, visited, map, map.get(cards[i]), cards[i])) {
                        flag = false;
                        break;
                    }
                    visited[i] = false;
                }
                if (flag) {
                    System.out.println("NONE");
                }
            }
        }
    }

    private static boolean backtrack(String[] cards, boolean[] visited, HashMap<String, Integer> map, int res, String ans) {
        // 加上3个运算符
        if (ans.length() == cards.length + 3 && res == 24) {
            System.out.println(ans);
            return true;
        }
        for (int i = 0; i < cards.length; i++) {
            if (!visited[i]) {
                visited[i] = true;
                if (backtrack(cards, visited, map, res + map.get(cards[i]), ans + "+" + cards[i])
                        || backtrack(cards, visited, map, res - map.get(cards[i]), ans + "-" + cards[i])
                        || backtrack(cards, visited, map, res * map.get(cards[i]), ans + "*" + cards[i])
                        || backtrack(cards, visited, map, res / map.get(cards[i]), ans + "/" + cards[i])) {
                    return true;
                }
                visited[i] = false;
            }
        }
        return false;
    }
}

全部评论

相关推荐

头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务