zoukankan      html  css  js  c++  java
  • 剑指offer-顺时针打印矩阵

    题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

    思路:深搜+标记

    ac代码:

     1 import java.util.ArrayList;
     2 public class Solution {
     3     ArrayList<Integer>list=new ArrayList<Integer>();
     4     public ArrayList<Integer> printMatrix(int [][] matrix) {
     5         boolean flag[][]=new boolean[matrix.length][matrix[0].length];
     6         list.clear();
     7         dfs(matrix,flag,0,0,1,1);
     8         return list;
     9     }
    10      
    11      void  dfs(int [][]s,boolean flag[][],int i,int j,int t,int n){
    12         if(n>s[0].length*s.length)
    13                 return ;
    14             if(t==1){
    15                if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
    16                    list.add(s[i][j]);
    17                    System.out.println("向右"+s[i][j]);
    18                    flag[i][j]=true;
    19                    n++;
    20                    dfs(s,flag,i,j+1,t,n);
    21                }else{
    22                    //向下
    23                    dfs(s,flag,i+1,j-1,2,n);
    24                }
    25             }
    26             if(t==2){
    27                 if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
    28                        list.add(s[i][j]);
    29                        System.out.println("向下"+s[i][j]);
    30                        flag[i][j]=true;
    31                        n++;
    32                        dfs(s,flag,i+1,j,t,n);
    33                    }else{
    34                        //向左
    35                        dfs(s,flag,i-1,j-1,3,n);
    36                    }
    37                 
    38             }
    39             if(t==3){
    40                 if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
    41                        list.add(s[i][j]);
    42                        System.out.println("向左"+s[i][j]);
    43                        flag[i][j]=true;
    44                        n++;
    45                        dfs(s,flag,i,j-1,t,n);
    46                    }else{
    47                        //向上
    48                        dfs(s,flag,i-1,j+1,4,n);
    49                    }
    50                 
    51             }
    52             if(t==4){
    53                 if(i>=0&&i<s.length&&j>=0&&j<s[0].length&&flag[i][j]==false){
    54                        list.add(s[i][j]);
    55                        System.out.println("向上"+s[i][j]);
    56                        flag[i][j]=true;
    57                        n++;
    58                        dfs(s,flag,i-1,j,t,n);
    59                    }else{
    60                        //向右
    61                        dfs(s,flag,i+1,j+1,1,n);
    62                    }
    63                 
    64             }
    65     }
    66 }
  • 相关阅读:
    springboot 连接 mysql 问题
    fehelper浏览器插件
    eslint
    小游戏
    vba获取word文档中的标题
    mybatis resultMap 复用
    图片上传
    Linux设备树中节点的命名格式和常见属性【转】
    SCP指令远程传输数据
    C#调用 inpout32.dll 操作 CPU 的并口
  • 原文地址:https://www.cnblogs.com/llsq/p/8796345.html
Copyright © 2011-2022 走看看