困难-2435. 矩阵中和能被 K 整除的路径

这是10月9日参加竞赛的一道题目,当时没做出来,数据量很大,对性能要求比较高
执行结果:通过
执行用时:220 ms, 在所有 JavaScript 提交中击败了100.00%的用户
内存消耗:75.2 MB, 在所有 JavaScript 提交中击败了57.58%的用户
通过测试用例:88 / 88
 

给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发,每一步只能往 下 或者往 右 ,你想要到达终点 (m - 1, n - 1) 。

请你返回路径和能被 k 整除的路径数目,由于答案可能很大,返回答案对 109 + 7 取余 的结果。

 

示例 1:

 

输入:grid = [[5,2,4],[3,0,5],[0,7,2]], k = 3
输出:2
解释:有两条路径满足路径上元素的和能被 k 整除。
第一条路径为上图中用红色标注的路径,和为 5 + 2 + 4 + 5 + 2 = 18 ,能被 3 整除。
第二条路径为上图中用蓝色标注的路径,和为 5 + 3 + 0 + 5 + 2 = 15 ,能被 3 整除。
示例 2:


输入:grid = [[0,0]], k = 5
输出:1
解释:红色标注的路径和为 0 + 0 = 0 ,能被 5 整除。
示例 3:


输入:grid = [[7,3,4,9],[2,3,6,2],[2,3,7,0]], k = 1
输出:10
解释:每个数字都能被 1 整除,所以每一条路径的和都能被 k 整除。
 

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 5 * 104
1 <= m * n <= 5 * 104
0 <= grid[i][j] <= 100
1 <= k <= 50

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/paths-in-matrix-whose-sum-is-divisible-by-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * @param {number[][]} grid
 * @param {number} k
 * @return {number}
 */
var numberOfPaths = function(grid, k) {
    //动态规划公式 preList[x][n] 表示每一行位置x,取余为n的数量
    const mod=1000000007
    
    const height=grid.length;
    const width=grid[0].length
    
    let preList=[]
    for(let y=0;y<height;y++){
        const list=[]
        for(let x=0;x<width;x++){
            list[x]=[]
            const v=grid[y][x]
            if(x===0&&y===0){
                list[0][v%k]=1
            }else{
                if(y>0){
                    preList[x].forEach(function(num,j){
                        const n=(v+j)%k
                        if(!list[x][n]){
                            list[x][n]=0
                        }
                        list[x][n]=(list[x][n]+num)%mod
                    })
                }
                if(x>0){
                    list[x-1].forEach(function(num,j){
                        const n=(v+j)%k
                        if(!list[x][n]){
                            list[x][n]=0
                        }
                        list[x][n]=(list[x][n]+num)%mod
                    })
                }
            }
            
            
        }
        preList=list
    }
    
    return preList[preList.length-1][0]||0

};

 

posted @ 2022-10-11 17:50  无工时代  阅读(38)  评论(0编辑  收藏  举报