美文网首页
679. 24 Game

679. 24 Game

作者: Jeanz | 来源:发表于2018-01-12 00:50 被阅读0次

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated through *, /, +, -, (, ) to get the value of 24.

    Example 1:

    Input: [4, 1, 8, 7]
    Output: True
    Explanation: (8-4) * (7-1) = 24
    

    Example 2:

    Input: [1, 2, 1, 2]
    Output: False
    

    Note:

    1. The division operator / represents real division, not integer division. For example, 4 / (1 - 2/3) = 12.
    2. Every operation done is between two numbers. In particular, we cannot use - as a unary operator. For example, with [1, 1, 1, 1] as input, the expression -1 - 1 - 1 - 1 is not allowed.

    一刷
    backtracking

    class Solution {
        boolean res = false;
        final double eps = 0.001;
        
        public boolean judgePoint24(int[] nums) {
            List<Double> arr = new ArrayList<>();
            for(int n: nums) arr.add((double) n);
            helper(arr);
            return res;
        }
        
        private void helper(List<Double> arr){
            if(res) return;
            if(arr.size() == 1){
                if(Math.abs(arr.get(0) - 24.0)<eps){
                    res = true;
                    return;
                }
            }
            
            for(int i=0; i<arr.size(); i++){
                for(int j=0; j<i; j++){
                    List<Double> next = new ArrayList<>();
                    Double p1 = arr.get(i), p2 = arr.get(j);
                    next.addAll(Arrays.asList(p1+p2, p1-p2, p2-p1, p1*p2));
                    if(Math.abs(p2)>eps) next.add(p1/p2);
                    if(Math.abs(p1)>eps) next.add(p2/p1);
                    
                    arr.remove(i);
                    arr.remove(j);
                    for(Double n:next){
                        arr.add(n);
                        helper(arr);
                        arr.remove(arr.size()-1);
                    }
                    arr.add(j, p2);
                    arr.add(i, p1);
                }
            }
            
            
        }
    }
    
    1. You cannot concatenate numbers together. For example, if the input is [1, 2, 1, 2], we cannot write this as 12 + 12.

    相关文章

      网友评论

          本文标题:679. 24 Game

          本文链接:https://www.haomeiwen.com/subject/lilxoxtx.html