LeetCode java day4
给你一个大小为 m x n
的矩阵 mat
,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
示例 2:
输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]
class Solution {
//对角线遍历
public int[] findDiagonalOrder(int[][] mat) {
int r=mat.length;
int c=mat[0].length;
int[]temp=new int[r*c];
int index=0;
//确定对角线条数,奇数向上,偶数向下
for (int i = 0; i < c+r-1; i++) {
if(i%2==0){
int x= i<r?i:r-1;
int y= i-x;
while(x>=0&&y<c){
temp[index++]=mat[x--][y++];
}
}else
{
int y= i<c?i:c-1;
int x= i-y;
while(x<r&&y>=0){
temp[index++]=mat[x++][y--];
}
}
}
return temp;
}
}
感觉更像是找规律的题目,要是矩阵再画大一点就更好了(这x,y我愣是写了半天),还有就是,,,,刚开始把矩阵和行列式弄混了,看到运行测试结果的时候直接给我看蒙了。。。[1,2] 我直接打印[1],泪目。。。
这个题也挺有打印正三角和倒三角的感觉
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
class Solution{
//对角线遍历
public void setZeroes(int[][] matrix) {
int row=matrix.length;
int col=matrix[0].length;
ArrayList<int[]>temp=new ArrayList<>();
for (int i = 0; i <row ; i++) {
for (int j = 0; j < col; j++) {
if (matrix[i][j] == 0) {
temp.add(new int[]{i,j});
}
}
}
int[][]ch=temp.toArray(new int[temp.size()][2]);
for (int i = 0; i <ch.length ; i++) {
int x=ch[i][0];
int y=ch[i][1];
for (int j = 0; j <row ; j++) {
matrix[j][y]=0;
}
for (int j = 0; j <col ; j++) {
matrix[x][j]=0;
}
}
}
}
遇事不决,暴力解决。。。
啊啊啊。周末就酱紫了先,不过今天复习了一下collection和set类,很爽!
明天复盘复盘这几天的题目–(*_*)