元素和小于等于 k 的子矩阵的数目

解读:
给一个非负数元素组成的矩阵,返回包含左上角元素,元素和小于或等于k的子矩阵。
思路:
第一时间仍然是线性思维,我感觉可以先看第一行元素能取到哪里i,再看第一列元素能取到哪里j,然后再在ixj的矩阵里面暴力解,然后想了一下在ixj矩阵里面怎么找到所有的矩阵,感觉步骤和直接从原始矩阵找符合条件的都一样了,所以选择从原始矩阵直接遍历。
从[0,0]的元素开始,按照列优先的顺序遍历矩阵,将当前位置视为子矩阵右下角,创建一个数组nums[i],保存当前列之前第i行所有元素的和,在遍历到第j列时,按照行从上到下遍历i,累加之后,如果当前值<=k,则number++。
class Solution {
public int countSubmatrices(int[][] grid, int k) {
int [] nums = new int[grid.length];
int number = 0;
for(int w = 0;w<grid[0].length;w++){
int rows = 0;
for(int h = 0;h<grid.length;h++){
nums[h] += grid[h][w];
rows += nums[h];
if(rows<=k){
number++;
}
}
}
return number;
}
}

欢迎评论区友好讨论



