java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
1. 法一,下标填充
代码:时间复杂度O(r*c).除题目要求外,算法本身没有需要额外空间,空间复杂度O(1) |
---|
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int matR = mat.length,matC = mat[0].length;//获取原矩阵的行和列数
if(r*c != matR*matC) return mat;//如果不合理,直接返回原始矩阵
int[][] ans = new int[r][c];//如果合理,创建需要重塑的矩阵容器
int ansI = 0, ansJ = 0;//重塑矩阵专用的两个下标,代表行和列
for(int i = 0;i<matR;i++){//依次遍历原矩阵元素,按行遍历
for(int j = 0;j<matC;j++){//依次从左到右遍历原矩阵元素
ans[ansI][ansJ] = mat[i][j];//将其放到重塑矩阵
if(ansJ==c-1){//如果重塑矩阵当前行放满了
ansI++;//转到下一行
ansJ = 0;//转到第一列
}else ansJ++;//如果重塑矩阵当前行没放满,去往当前行下一列(下一个位置放)
}
}
return ans;
}
}
2. 法二:数学除法和取余
文章来源:https://www.toymoban.com/news/detail-810722.html
- 从0开始算,一个3列n行矩阵中,每行就有3个元素,我们从头开始数,第15个元素,在第几行?当然是15/3=5
- 知道是第5行,那么在第5行的第几列呢?当然是让它15%3 = 0; 也就是放在第0个位置,也就是[5][0]位置
- 如果我们将其放到4列n行矩阵中,每行有4个元素,从头开始算,第15个元素在第几行?当然是15/4 = 3
- 第几列呢?15%4 = 3. 也就是[3][3]位置
代码:时间复杂度O(r*c).除题目要求外,算法本身没有需要额外空间,空间复杂度O(1) |
---|
文章来源地址https://www.toymoban.com/news/detail-810722.html
class Solution {
//从0开始算,一个3列n行矩阵中,每行就有3个元素,我们从头开始数,第15个元素,在第几行?当然是15/3=5
//知道是第5行,那么在第5行的第几列呢?当然是让它15%3 = 0; 也就是放在第0个位置,也就是[5][0]位置
//如果我们将其放到4列n行矩阵中,每行有4个元素,从头开始算,第15个元素在第几行?当然是15/4 = 3
//第几列呢?15%4 = 3. 也就是[3][3]位置
public int[][] matrixReshape(int[][] mat, int r, int c) {
int matR = mat.length,matC = mat[0].length;//获取原矩阵的行和列数
if(r*c != matR*matC) return mat;//如果不合理,直接返回原始矩阵
int[][] ans = new int[r][c];//如果合理,创建需要重塑的矩阵容器
//利用除法和取余,获取每个元素应该在的位置
for(int i = 0; i< matR*matC;i++) ans[i/c][i%c] = mat[i/matC][i%matC];
return ans;
}
}
到了这里,关于java数据结构与算法刷题-----LeetCode566. 重塑矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!