Solution.java 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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. public static void main(String[] args) {
  9. Solution s = new Solution();
  10. System.out.println(s.canIWin(10, 11));
  11. System.out.println(s.canIWin(10, 0));
  12. }
  13. private boolean canIWinIter(int maxChoosableInteger, int desiredTotal, int intChoosen, int total,
  14. boolean isMyTurn) {
  15. if (total >= desiredTotal) {
  16. System.out.println(total);
  17. if (isMyTurn) {
  18. return true;
  19. }
  20. return false;
  21. }
  22. for (int i = 0; i < maxChoosableInteger; i++) {
  23. boolean isChoosen = (intChoosen & (1 << i)) != 0;
  24. if (isChoosen) {
  25. continue;
  26. }
  27. boolean iCanWin = canIWinIter(maxChoosableInteger, desiredTotal, intChoosen | (1 << i), total + i + 1,
  28. !isMyTurn);
  29. if (iCanWin) {
  30. return true;
  31. }
  32. }
  33. return false;
  34. }
  35. }