题解 | #牧场边界巡游#
牧场边界巡游
https://www.nowcoder.com/practice/bc7fe78f7bcc49a8bc0afdd7a55ca810
知识点:数组,模拟
我们只需要模拟逆时针遍历的轨迹,同时限定四个方向上的边界,具体分为以下四种情况:
1.向下遍历,到达下边界后,需要将左边界右移,防止后续重复遍历当前位置。
2.到达下边界后,我们需要向右遍历,到达右边界后,需要将下边界上移。
3.到达右边界,我们需要向上遍历,遍历完成后将右边界左移。
4.到达上边界后,我们需要向左遍历,直到左边界,完成后将上边界下移。
重复以上步骤,直至我们遍历了所有的元素,即数组大小等于m*n。
Java题解如下:
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型二维数组 * @return int整型一维数组 */ public int[] spiralTravelCounterClockwise (int[][] matrix) { // write code here int m = matrix.length; int n = matrix[0].length; int[] res = new int[m * n]; int index = 0; int up = 0, down = m - 1, left = 0, right = n - 1; while(index < m * n) { for(int i = up; i <= down && index < m * n; i++) { res[index++] = matrix[i][left]; } left++; for(int i = left; i <= right && index < m * n; i++) { res[index++] = matrix[down][i]; } down--; for(int i = down; i >= up && index < m * n; i--) { res[index++] = matrix[i][right]; } right--; for(int i = right; i >= left && index < m * n; i--) { res[index++] = matrix[up][i]; } up++; } return res; } }