486. Predict the Winner

class Solution {
public:
    bool PredictTheWinner(vector<int>& nums) {
        return helper(nums, 0, nums.size()-1, true, 0, 0);
    }
    // return true if player1 can win. false if player1 will lose.
    bool helper(vector<int>& nums, int i, int j, bool first, int score1, int score2) {
        if (i == j) {
            if (first)  // player1 choose
                return score1 + nums[i] >= score2;
            else
                return score1 >= score2 + nums[i];
        }
        if (first) {
            // player1 choose i or j, player1 can win, return true
            return (helper(nums, i+1, j, !first, score1+nums[i], score2) ||
                helper(nums, i, j-1, !first, score1+nums[j], score2));
        }
        else {
            // player2 choose i or j, player1 will always win, return true.
            return (helper(nums, i+1, j, !first, score1, score2 + nums[i]) &&
                helper(nums, i, j-1, !first, score1, score2 + nums[j]));
        }
    }
};
原文地址:https://www.cnblogs.com/JTechRoad/p/10008399.html