题解 | #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;
    }
}

全部评论

相关推荐

2024-12-30 22:31
吉首大学 Web前端
工字钢写代码:改成吉林就OK了
点赞 评论 收藏
分享
饼子吃到撑:海面这个是,投了一般都给的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务