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