LeetCode 679 24点游戏

  • 分析
    递归回溯,judge函数的含义是对cards中的数据做满足题目的操作是否可以得到24(添加cards.size() - 1个运算符),有顺序的取出两个数进行操作,然后把这两个数操作的结果放到新的vector里面。递归调用judge。面试高频题

  • 代码

class Solution {
    
    
public:
    bool judgePoint24(vector<int>& cards) {
    
    
        vector<double> vec(cards.begin(), cards.end());
        return judge(vec);
    }

    bool judge(vector<double>& cards){
    
    
        int size = cards.size();

        if(size == 1){
    
    
            if(abs(cards[0] - 24) < pow(10, -6)) return true;
            return false;
        } 

        for(int i = 0; i < size; i++){
    
    
            for(int j = 0; j < size; j++){
    
    
                if(i == j) continue;

                vector<double> temp;
                for(int k = 0; k < size; k++){
    
    
                    if(k != i && k != j){
    
    
                        temp.push_back(cards[k]);
                    }
                }

                for(int k =0; k < 4; k++){
    
    
                    //0+,1-,2*,3/

                    if(k == 0){
    
    
                        if(i > j) continue;
                        temp.push_back(cards[i] + cards[j]);
                    }else if(k == 1){
    
    
                        temp.push_back(cards[i] - cards[j]);
                    }else if(k == 2){
    
    
                        if(i > j) continue;
                        temp.push_back(cards[i] * cards[j]);
                    }else if(k == 3){
    
                            
                        temp.push_back(cards[i] / cards[j]);
                    }                    

                    if(judge(temp)){
    
    
                        return true;
                    }
                    temp.pop_back();
                }

            }
        }

        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/119965303
今日推荐