Can I Win LeetCode solution in Java

1
class Solution {
2
int numlimit, tgt;
3

4
public boolean canIWin(int maxChoosableInteger, int desiredTotal) {
5
numlimit = maxChoosableInteger;
6
tgt = desiredTotal;
7

8
int maxsum = (numlimit * (numlimit + 1)) / 2;
9
if (maxsum < tgt) return false;
10

11
int dp[] = new int[(1 << numlimit)];
12
if (solve(0, 0, 0, dp)) {
13
return true;
14
}
15
return false;
16
}
17

18
public boolean solve(int mask, int lstsum, int player, int dp[]) {
19

20
if (dp[mask] != 0) return (dp[mask] == 1);
21

22
for (int i = 0; i < numlimit; i++) {
23
if ((mask & (1 << i)) == 0) {
24
if ((lstsum + (i + 1) >= tgt)
25
|| !solve((mask | (1 << i)), lstsum + (i + 1), player + 1, dp)) {
26
dp[mask] = 1;
27
return true;
28
}
29
}
30
}
31

32
dp[mask] = -1;
33
return false;
34
}
35
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0