Can I Win LeetCode solution in C++

1
class Solution {
2
private:
3
vector<vector<int>> dp;
4
bool backtrack(int curr, int &maxInt, int &desire, int mask, int player) {
5
if (dp[player][mask] != -1) {
6
return dp[player][mask];
7
} else {
8
for (int i = 1; i <= maxInt; i++) {
9
int nmask = (1 << (i - 1));
10
if ((mask & nmask) == 0) {
11
if (curr + i >= desire or
12
!backtrack(curr + i, maxInt, desire, mask + nmask, (player + 1) % 2)) {
13
return dp[player][mask] = true;
14
}
15
}
16
}
17
return dp[player][mask] = false;
18
}
19
}
20

21
public:
22
bool canIWin(int maxChoosableInteger, int desiredTotal) {
23
dp = vector<vector<int>>(2, vector<int>(1 << maxChoosableInteger, -1));
24
if (maxChoosableInteger * (maxChoosableInteger + 1) / 2 < desiredTotal) {
25
return false;
26
}
27
int curr = 0, mask = 0;
28
return backtrack(curr, maxChoosableInteger, desiredTotal, mask, 0);
29
}
30
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0