Skip to content

Commit 1b09846

Browse files
committed
CanIWin464
1 parent 1dbaa64 commit 1b09846

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

src/CanIWin464.java

+29
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,33 @@ private String setKey(boolean[] set) {
6767
return sb.toString();
6868
}
6969

70+
71+
72+
public boolean canIWin2(int maxChoosableInteger, int desiredTotal) {
73+
if (desiredTotal == 0) return true;
74+
if (((1 + maxChoosableInteger) / 2 * maxChoosableInteger) < desiredTotal) {
75+
return false;
76+
}
77+
return helper(0, desiredTotal, new Boolean[1 << maxChoosableInteger], maxChoosableInteger);
78+
}
79+
80+
private boolean helper(int state, int desiredTotal, Boolean[] memo, int M) {
81+
if (desiredTotal <= 0) return false;
82+
if (memo[state] != null) return memo[state];
83+
for (int i=M-1; i>=0; i--) {
84+
if ((state & (1 << i)) == 0) {
85+
state |= 1 << i;
86+
if (!helper(state, desiredTotal-i-1, memo, M)) {
87+
state &= ~(1 << i);
88+
memo[state] = true;
89+
return true;
90+
}
91+
state &= ~(1 << i);
92+
}
93+
}
94+
memo[state] = false;
95+
return false;
96+
}
97+
98+
7099
}

0 commit comments

Comments
 (0)