题目的链接在这里:https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
- 题目大意
- 一、示意图
- 二、解题思路
- 错误示范
- 暴力
题目大意 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]] 则依次打印出数字 [1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10] 数据范围: 0 <= matrix.length <= 100 0 <= matrix[i].length <= 100
一、示意图 二、解题思路
错误示范和暴力错误示范
代码如下:
package LeetCode; import java.util.*; public class Test11 { //先设置向上走的 因为他一直不可以 所以可以排除 int stepX[]={0,1,0,-1}; int stepY[]={1,0,-1,0}; ArrayListarrayList=new ArrayList<>(); boolean isVisited[][]=new boolean[100][100]; public ArrayList printMatrix(int [][] matrix) { //由外向里顺时针顺序打印每一个数字 //那就是 移动方向就是 向右走 然后向下走 然后向左走 然后向上走 然后再向右走 //那就把数组改成这样即可 正常的顺序即可 然后DFS if(matrix==null) return arrayList; //先把第一个进去吧 isVisited[0][0]=true; arrayList.add(matrix[0][0]); dfs(0,0,matrix.length,matrix[0].length,matrix); return arrayList; } private void dfs(int x, int y, int row, int col, int[][] matrix) { //然后进行判断 for(int i=0;i<4;i++){ int newX=x+stepX[i]; int newY=y+stepY[i]; //然后进行判断 不越界 没访问过 if(newX>=0&&newX =0&&newY
暴力 代码如下:
import java.util.ArrayList; public class Solution { public ArrayListprintMatrix(int [][] matrix) { ArrayList arrayList=new ArrayList<>(); if(matrix==null) return arrayList; //low和high表示的是行数 int low=0; int high=matrix.length-1; //left和right表示的是 列数 int left=0; int right=matrix[0].length-1; while (low<=high&&left<=right){ //先向右边 for(int i=left;i<=right;i++){ arrayList.add(matrix[low][i]); } //向下 列不变 行边 for(int i=low+1;i<=high;i++){ arrayList.add(matrix[i][right]); } //然后是向左边 有可能出现只有一行的情况 if(low =left;i--) { arrayList.add(matrix[high][i]); } } //然后是向上走 防止只有一列的情况 if(left =low+1;i--){ arrayList.add(matrix[i][left]); } } //一下 *** 作之后 点会出现在起始点的向下一个位置 更新这些行数就行了 low++; high--; left++; right--; } return arrayList; } } 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)