1.题解
用map记录所有状态的属性,并且依次for循环枚举每一个元素,如果没有访问过就尝试去访问,如果访问过就忽视它继续continue。
class Solution {public:bool dfs(int stat,unordered_map<int,int> &dp,int desiredTotal,int maxChoosableInteger){if(dp.count(stat)) return dp[stat];for(int i=1; i <= maxChoosableInteger ;i++){int x = (1<<(i-1));if((stat & x)!=0) continue;if(i>=desiredTotal || !dfs(stat|x,dp,desiredTotal-i,maxChoosableInteger)) return dp[stat] = true;}return dp[stat] = false;}bool canIWin(int maxChoosableInteger, int desiredTotal) {if(maxChoosableInteger>=desiredTotal)return true;if(maxChoosableInteger*(maxChoosableInteger+1)/2 < desiredTotal){return false;}unordered_map<int,int> dp;return dfs(0,dp,desiredTotal,maxChoosableInteger);}};
