forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCan I Win.java
35 lines (29 loc) · 941 Bytes
/
Can I Win.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
int numlimit, tgt;
public boolean canIWin(int maxChoosableInteger, int desiredTotal) {
numlimit = maxChoosableInteger;
tgt = desiredTotal;
int maxsum = (numlimit*(numlimit+1))/2;
if(maxsum < tgt)
return false;
int dp[] = new int[(1<<numlimit)];
if(solve(0, 0, 0, dp)){
return true;
}
return false;
}
public boolean solve(int mask, int lstsum, int player, int dp[]) {
if(dp[mask] != 0)
return (dp[mask] == 1);
for(int i = 0; i < numlimit; i++) {
if((mask&(1<<i)) == 0) {
if((lstsum+(i+1) >= tgt) || !solve((mask|(1<<i)), lstsum+(i+1), player+1, dp)) {
dp[mask] = 1;
return true;
}
}
}
dp[mask] = -1;
return false;
}
}