1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public boolean stoneGame(int[] piles) { Integer[][] memo = new Integer[piles.length][piles.length]; return stoneGame(piles, 0, piles.length - 1, memo) > 0; }
private int stoneGame(int[] piles, int i, int j, Integer[][] memo) { if (i == j) { return piles[i]; }
if (memo[i][j] != null) { return memo[i][j]; }
int chooseLeft = piles[i] - stoneGame(piles, i + 1, j, memo); int chooseRight = piles[j] - stoneGame(piles, i, j - 1, memo); memo[i][j] = Math.max(chooseLeft, chooseRight); return memo[i][j]; } }
|