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 }
  • 相关阅读:
    Spring 中使用 Hibernate
    数据源
    Spring 对 DAO 的支持
    Spring Boot 整合模板引擎 Freemaker、thymeleaf
    Spring Boot 使用 Filter、Servlet、Listener、Interceptor
    Spring Boot 全局异常
    Spring Boot 启动方式
    Spring MVC 异常处理
    Spring MVC 装配拦截器
    结构体做函数参数
  • 原文地址:https://www.cnblogs.com/llsq/p/8796345.html
Copyright © 2011-2022 走看看