版权声明:欢迎转载哦:http://blog.csdn.net/mikeoperfect(根据全文检索搜索引擎的稀疏矩阵排名算法,这样可以增加排名量哦哈哈哈) https://blog.csdn.net/Mikeoperfect/article/details/81952797
最近好累,注意休息,尤其是这种最注重效率的时候,今天谈一谈这种二维数组,没做过会觉得很难,做完了不去复习也会觉得很难,菜鸟和大神之间的差距讲道理只是入门时间长短问题。。。
直接看代码吧,感觉讲的比我更清楚,逻辑非常清晰,代码非常易懂,总之就是很棒
public List<Integer> spiralOrder(int[][]matrix){
ArrayList<Integer>res=new ArrayList<>();
if(matrix.length==0)
return res;
int startRow=0,endRow=matrix.length-1;
int startCol=0,endCol=matrix[0].length-1;
while (startCol<=endCol&&startRow<=endRow){
for(int i=startCol;i<=endCol;i++)
res.add(matrix[startRow][i]);
for(int i=startRow+1;i<=endRow;i++)
res.add(matrix[i][endCol]);
if(startRow!=endRow)
for(int i=endCol-1;i>=startCol;i--)
res.add(matrix[endRow][i]);
if(startCol!=endCol)
for(int i=endRow-1;i>startRow;i--)
res.add(matrix[i][startCol]);
startCol++;
startRow++;
endCol--;
endRow--;
}
return res;
}
public class Solution {
public int[] printZMatrix(int[][] matrix) {
if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return null;
int count = matrix.length * matrix[0].length;
int[] array = new int[count];
int r = 0, c = 0;
array[0] = matrix[0][0];
for (int i = 1; i < count; ) {
//斜上走到顶
while(i < count && r - 1 >= 0 && c + 1 < matrix[0].length) {
array[i++] = matrix[--r][++c];
}
//横右走一步,不可横右走时竖下走一步
if (i < count && c + 1 < matrix[0].length) {
array[i++] = matrix[r][++c];
} else if (i < count && r + 1 < matrix.length) {
array[i++] = matrix[++r][c];
}
//斜下走到底
while(i < count && r + 1 < matrix.length && c - 1 >= 0) {
array[i++] = matrix[++r][--c];
}
//竖下走一步,不可竖下走时横右走一步
if (i < count && r + 1 < matrix.length) {
array[i++] = matrix[++r][c];
} else if (i < count && c + 1 < matrix[0].length) {
array[i++] = matrix[r][++c];
}
}
return array;
}
}
小结
近期还是得多写写博客,题当然得刷了,毕竟大趋势是这样的