解题思路:
如果我们想要知道当数字N时爱丽丝赢,就要看N-x时的情况,当N-x爱丽丝赢时,则N时爱丽丝输(相当于N时爱丽丝选X,由于N-x是鲍勃先手选所以必赢),反之,当N-x时爱丽丝输,则N时爱丽丝必赢。(因为鲍勃,爱丽丝都是最佳状态)
由于我们知道2爱丽丝赢,3爱丽丝输,则我们就可以由2.3推N-x,N,即状态转移方程:(初始化dp数组为false)
if(N % x == 0 && dp[N-x] == false){
dp[N] = true;
break;//(由于鲍勃,爱丽丝都时最佳状态,只要有一个满足条件必选)
}
其实1是2~N每个数的公约数,按照上面的思路,设x=1即可, 如果dp[2]=true,那么即[N-x]=true,可得N=3,所以dp[N]=false;
交替出现true,false,所以可以简洁解法:
class Solution {
public:
bool divisorGame(int N) {
return N%2==0?true:false;
}
};