| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- package _464;
 
- class Solution {
 
-     // maxChoosableInteger will not be larger than 20,
 
-     // and desiredTotal will not be larger than 300
 
-     public boolean canIWin(int maxChoosableInteger, int desiredTotal) {
 
-         return canIWinIter(maxChoosableInteger, desiredTotal, 0, 0, true);
 
-     }
 
-     private static void testCanIWin(int maxChoosableInteger, int desiredTotal) {
 
-         Solution solution = new Solution();
 
-         System.out.println(solution.canIWin(maxChoosableInteger, desiredTotal));
 
-     }
 
-     public static void main(String[] args) {
 
-         testCanIWin(10, 11);
 
-         testCanIWin(2, 3);
 
-     }
 
-     private boolean canIWinIter(int maxChoosableInteger, int desiredTotal, int intChoosen, int total,
 
-             boolean isMyTurn) {
 
-         if (total >= desiredTotal) {
 
-             System.out.println(total);
 
-             if (isMyTurn) {
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         for (int i = 0; i < maxChoosableInteger; i++) {
 
-             boolean isChoosen = (intChoosen & (1 << i)) != 0;
 
-             if (isChoosen) {
 
-                 continue;
 
-             }
 
-             boolean iCanWin = canIWinIter(maxChoosableInteger, desiredTotal, intChoosen | (1 << i), total + i + 1,
 
-                     !isMyTurn);
 
-             if (iCanWin) {
 
-                 return true;
 
-             }
 
-         }
 
-         return false;
 
-     }
 
- }
 
 
  |