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;
- }
- }
|