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]));
}
}
};