题目地址:
https://leetcode.com/problems/stone-game-iv/description/
有 n > 0 n>0 n>0个石子,两个人玩游戏,每个人可以拿走正的完全平方数个石子,恰好拿完的人获胜。问先手是否必胜。
设 f [ k ] f[k] f[k]表示先手面对的局面是 k k k个石子的情况下是否必胜,初始条件 f [ 0 ] = F f[0]=F f[0]=F。如果存在 j j j使得 f [ i − j 2 ] = F f[i-j^2]=F f[i−j2]=F,说明 f [ i ] = T f[i]=T f[i]=T。代码如下:
class Solution {
public:
bool winnerSquareGame(int n) {
vector<bool> f(n + 1);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i / j; j++)
if (!f[i - j * j]) {
f[i] = true;
break;
}
return f[n];
}
};
时间复杂度 O ( n n ) O(n\sqrt n) O(nn),空间 O ( 1 ) O(1) O(1)。