2
public int[] pathsWithMaxScore(List<String> board) {5
int n = board.get(0).length();6
int[][] dp = new int[m][n];7
int[][] ways = new int[m][n];8
ways[0][0] = 1; // base case.9
int[][] dirs = {{-1, 0}, {0, -1}, {-1, -1}}; // all 3 ways where we can travel.10
for (int i = 0; i < m; i++) {11
for (int j = 0; j < n; j++) {12
if (board.get(i).charAt(j) == 'X') {15
int cur = Character.isDigit(board.get(i).charAt(j)) ? board.get(i).charAt(j) - '0' : 0;16
for (int[] d : dirs) {19
if (x < 0 || y < 0 || ways[x][y] == 0) {22
if (cur + dp[x][y] > dp[i][j]) {23
dp[i][j] = cur + dp[x][y];26
if (cur + dp[x][y] == dp[i][j]) {27
ways[i][j] += ways[x][y];33
return new int[] {dp[m - 1][n - 1], ways[m - 1][n - 1]};