编辑代码

function collectCoins(coins) {
 
const m = coins.length; const n = coins[0].length;
// 定义状态数组 dp,初始化 dp[0][0]为起点的硬币数量 const dp = Array.from({ length: m }, () => Array(n).fill(0));
dp[0][0] = coins[0][0];

// 计算第一行和第一列的最大硬币数量

for (let i = 1; i < m; i++) {

dp[i][0] = dp[i-1][0] + coins[i][0];

}

for (let j = 1; j < n; j++) {

dp[0][j] = dp[0][j-1] + coins[0][j];

}

// 填表计算 dp 数组

for (let i = 1; i < m; i++) { for (let j = 1; j < n; j++) {
dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]) + coins[i][j];

}

}

// 返回右下角位置的最大硬币数量

return dp[m-1][n-1];

}