LeetCode54
This commit is contained in:
parent
177d5a4849
commit
c707fd4ca2
86
src/main/java/cn/whaifree/leetCode/middle/LeetCode54.java
Normal file
86
src/main/java/cn/whaifree/leetCode/middle/LeetCode54.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
package cn.whaifree.leetCode.middle;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
|
||||||
|
*/
|
||||||
|
public class LeetCode54 {
|
||||||
|
|
||||||
|
public List<Integer> spiralOrder(int[][] matrix) {
|
||||||
|
int width = matrix[0].length;
|
||||||
|
int height = matrix.length;
|
||||||
|
List<Integer> s = new ArrayList<>(width * height);
|
||||||
|
|
||||||
|
if (width == 1) {
|
||||||
|
|
||||||
|
} else if (height == 1) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int loop = Math.min(width, height) / 2;
|
||||||
|
int start = 0;
|
||||||
|
int i = 0, j = 0;
|
||||||
|
while (start < loop) {
|
||||||
|
|
||||||
|
for (i = start; i < width - start - 1; i++) {
|
||||||
|
s.add(matrix[start][i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = start; j < height - start - 1; j++) {
|
||||||
|
s.add(matrix[j][i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i >= start + 1; i--) {
|
||||||
|
s.add(matrix[j][i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; j >= start + 1; j--) {
|
||||||
|
s.add(matrix[j][i]);
|
||||||
|
}
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width > height) {
|
||||||
|
if (height == 1) {
|
||||||
|
// 横向填充
|
||||||
|
for (; i < width - start; i++) {
|
||||||
|
s.add(matrix[start][i]);
|
||||||
|
}
|
||||||
|
}else if (height % 2 == 1) {
|
||||||
|
// 横向填充
|
||||||
|
for (; i < width - start-1; i++) {
|
||||||
|
s.add(matrix[start][i + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 纵向填充
|
||||||
|
if (width == 1) {
|
||||||
|
for (; j < height - start; j++) {
|
||||||
|
s.add(matrix[j][i]);
|
||||||
|
}
|
||||||
|
} else if (width % 2 == 1 ) {
|
||||||
|
for (; j < height - start - 1; j++) {
|
||||||
|
s.add(matrix[j+1][i + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
spiralOrder(new int[][]{
|
||||||
|
{1,2,4},
|
||||||
|
{5,6,8},
|
||||||
|
{9,10,12}
|
||||||
|
|
||||||
|
}).forEach(System.out::println);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user