题解 | #24点运算#

24点运算

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
//递归栈
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static Map<String, Integer> hashmap = new HashMap<>();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) {
            String[] s = in.nextLine().split(" ");
            for (int i = 0 ; i < 8 ; ++i) {
                hashmap.put((char)('2' + i) + "", i + 2);
            }
            hashmap.put("10", 10);//注意该情况
            hashmap.put("J", 11);
            hashmap.put("Q", 12);
            hashmap.put("K", 13);
            hashmap.put("A", 1);


            int[] nums = new int[4];
            for(int i=0 ; i<4 ; ++i){
                //System.out.println(s[i]);
                if(!hashmap.containsKey(s[i])){
                    System.out.println("ERROR");
                    return;
                }
                else{
                    nums[i] = hashmap.get(s[i]);
                }
            }
            boolean[] visited = new boolean[4];
            Stack<String> stack = new Stack<>();
            for(int i=0 ; i<nums.length ; ++i){
                stack.push(s[i]);
                visited[i] = true;
                int value = nums[i];
                help24(nums, visited, value, stack);
                if(flag){
                    System.out.println(ans.toString());
                    return;
                }
                visited[i] = false;
                stack.pop();
            }
            System.out.println("NONE");

        }
    }
    static boolean flag = false;
    static String ans = "";
    public static void help24(int[] nums, boolean[] visited, int value, Stack<String> stack){
        if(stack.size()==4 && value == 24){
            //System.out.println(stack);
            List<String> list = new ArrayList<>();
            while(!stack.isEmpty()){
                list.add(stack.pop());
            }
            for(int i=list.size()-1 ; i>=0 ; --i){
                ans+=list.get(i);
            }
            flag=true;
        }
        if(flag){
            return;
        }
        
        for(int i=0 ; i<nums.length ; ++i){
            
            if(!visited[i]){
                visited[i] = true;
                stack.push("*"+nums[i]);
                help24(nums, visited, value*nums[i], stack);
                if(flag) return;
                stack.pop();

                stack.push("/"+nums[i]);
                help24(nums, visited, value/nums[i], stack);
                if(flag) return;
                stack.pop();

                stack.push("+"+nums[i]);
                help24(nums, visited, value+nums[i], stack);
                if(flag) return;
                stack.pop();

                stack.push("-"+nums[i]);
                help24(nums, visited, value-nums[i], stack);
                if(flag) return;
                stack.pop();

                visited[i] = false; //遍历当前节点完毕
            }
            
        }
    }


}

全部评论

相关推荐

点赞 评论 收藏
分享
今天 00:23
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务