首页 > 其他分享 >剑指Offer 29. 顺时针打印矩阵

剑指Offer 29. 顺时针打印矩阵

时间:2023-08-27 19:44:37浏览次数:39  
标签:顺时针 matrix Offer int 打印 矩阵 29

题目链接: 剑指Offer 29. 顺时针打印矩阵

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

解法思路:

本题的题意比较简单,也就是螺旋打印矩阵,但是这里面有技巧,

  1. 使用 数组 定义好在打印过程中的四个移动方向
  2. 在遍历的过程中,每次都是在该方向上移动,
  3. 当移动到下一个点时,要判断这个下一个点是否合法(也就是之前访问过没,判断越界没)
  4. 如果访问过或越界,那么调整方向,换下一个方向执行
  5. 最后更新x,y的值。
    代码:
func spiralOrder(matrix [][]int) []int {

    n := len(matrix)
     if n == 0 {
         return nil
    } 
    m := len(matrix[0])
    dx := [4]int{0,1,0,-1}  //右、下、左、上
    dy := [4]int{1,0,-1,0}
    
    // res := make([]int,n*m)
    var res []int
   
    use := make([][]bool,n)
    for i:= 0 ;i<n;i++{
        use[i] = make([]bool,m)
    }

    x := 0 
    y := 0
    d := 0
    for i := 0 ; i < n*m ;i++{
        res = append(res,matrix[x][y])
        use[x][y] = true
        a := x + dx[d]
        b := y + dy[d]
        if a < 0 || a >= n || b < 0 ||b >= m ||use[a][b] == true{
            d = (d+1)%4
            a = x + dx[d]
            b = y + dy[d]
        }
        
    x = a
    y = b
    }
    return res
}

标签:顺时针,matrix,Offer,int,打印,矩阵,29
From: https://www.cnblogs.com/lxing-go/p/17660711.html

相关文章

  • 剑指Offer 28. 对称的二叉树
    题目链接:剑指Offer28.对称的二叉树题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。解法思路:采用递归的方法,依次遍历根节点的左子树和右子树,判断左子树的左子树与右子树的右......
  • 剑指Offer 26. 树的子结构
    题目链接:剑指Offer26.树的子结构题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构,即A中有出现和B相同的结构和节点值。解法思路:首先这道题很明显是采取递归的形式,整体流程主要分为两步:找到A树上的某个节点与B树的根......
  • 剑指Offer 27. 二叉树的镜像
    题目链接:剑指Offer27.二叉树的镜像题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。解法思路:此题本质上就是一个二叉树遍历的问题:在遍历的过程中,交换左右子树即可。代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint......
  • 剑指Offer 25. 合并两个排序的链表
    题目链接:剑指Offer25.合并两个排序的链表题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。解法思路:在两链表向后遍历的过程中,哪个更小一点,哪个先放在合并后的链表中。最后哪个链表剩余,直接接在合并链表的后面即可。代码:/***Definit......
  • 剑指Offer 22. 链表中倒数第k个节点
    题目链接:剑指Offer22.链表中倒数第k个节点题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。解法思路:快慢指针:慢指针不动,快指针先走k步,然后快慢指针一起向后走,当快指针走到末尾时,慢指针所指的就是倒......
  • 「算法与数据结构」梳理6大排序算法 为了offer!
    6种排序如下......
  • 「算法与数据结构」梳理6大排序算法 为了offer!
    6种排序如下......
  • 剑指 Offer 68 - II. 二叉树的最近公共祖先(简单)
    题目:classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){if(root==p||root==q||root==nullptr)returnroot;//如果当前节点为空或者当前节点即为其中某个指定节点TreeNode*left=lowestCommo......
  • 剑指 Offer 55 - II. 平衡二叉树(简单)
    题目:classSolution{public:intgetHeight(TreeNode*cur){//递归函数返回的是以当前节点为根节点的高度。if(!cur)return0;//空节点的高度为0intleftHeight=getHeight(cur->left);//取得左节点的高度if(leftHeight=......
  • 剑指Offer 21. 调整数组顺序使奇数位于偶数前面
    题目链接:剑指Offer21.调整数组顺序使奇数位于偶数前面题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。解法思路:一、快慢指针法:快指针遍历整个数组,当遇到奇数时,将当前数与慢指针所指的数交换,最终......