Solution.java 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package _464;
  2. class Solution {
  3. // maxChoosableInteger will not be larger than 20,
  4. // and desiredTotal will not be larger than 300
  5. public boolean canIWin(int maxChoosableInteger, int desiredTotal) {
  6. return canIWinIter(maxChoosableInteger, desiredTotal, 0, 0, true);
  7. }
  8. private static void testCanIWin(int maxChoosableInteger, int desiredTotal) {
  9. Solution solution = new Solution();
  10. System.out.println(solution.canIWin(maxChoosableInteger, desiredTotal));
  11. }
  12. public static void main(String[] args) {
  13. testCanIWin(10, 11);
  14. testCanIWin(2, 3);
  15. }
  16. private boolean canIWinIter(int maxChoosableInteger, int desiredTotal, int intChoosen, int total,
  17. boolean isMyTurn) {
  18. if (total >= desiredTotal) {
  19. System.out.println(total);
  20. if (isMyTurn) {
  21. return true;
  22. }
  23. return false;
  24. }
  25. for (int i = 0; i < maxChoosableInteger; i++) {
  26. boolean isChoosen = (intChoosen & (1 << i)) != 0;
  27. if (isChoosen) {
  28. continue;
  29. }
  30. boolean iCanWin = canIWinIter(maxChoosableInteger, desiredTotal, intChoosen | (1 << i), total + i + 1,
  31. !isMyTurn);
  32. if (iCanWin) {
  33. return true;
  34. }
  35. }
  36. return false;
  37. }
  38. }