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;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值