zoukankan      html  css  js  c++  java
  • LeetCode54、59:螺旋矩阵|、||(递归,模拟)

     解题思路:定义一个方向数组,用栈或者直接从左上角的起点进行DFS,如果碰到下一步无法访问,调整方向,继续遍历,直到所有元素都访问了。

    (这道题好有历史感,到现在还记得我读大一的时候参加院队培训的时候做的,当时还不会搜索,只会找规律,没想到找了好长时间的规律真让做对了,当时还是很兴奋。后来蓝桥杯好像也出现过一道类似的题目,那时候就没有再去找规律了,或许也是时间来不及,hhh,大一到研一,时间真的像是白驹过隙,自己也是越来越没有当初的敢打敢拼,思虑的东西也越来越多,希望自己能够拾回大一大二的那种意气风发的感觉,冲冲冲!)

     1 class Solution:
     2     def dfs(self,matrix,i,j,idx):
     3         self.vis[i][j]=1
     4         self.ans.append(matrix[i][j])
     5         for k in range(4):
     6             k = (idx+k)%4
     7             x = i+self.fx[k][0]
     8             y = j+self.fx[k][1]
     9             if 0<=x<self.n and 0<=y<self.m and not self.vis[x][y]:
    10                 self.dfs(matrix,x,y,k)
    11                 break
    12         return
    13     def spiralOrder(self, matrix):
    14         self.fx = [[0,1],[1,0],[0,-1],[-1,0]]
    15         self.vis = [[ 0 for j in range(len(matrix[i]))]for i in range(len(matrix))]
    16         self.n,self.m = len(matrix),len(matrix[0])
    17         self.ans = []
    18         self.dfs(matrix,0,0,0)
    19         return self.ans

    螺旋矩阵||也是一样的解法。

     1 #没用的变量都没删
     2 class Solution:
     3     def dfs(self,val,i,j,idx):
     4         self.vis[i][j]=1
     5         self.matrix[i][j]=val
     6         val+=1
     7         for k in range(4):
     8             k = (idx+k)%4
     9             x = i+self.fx[k][0]
    10             y = j+self.fx[k][1]
    11             if 0<=x<self.n and 0<=y<self.m and not self.vis[x][y]:
    12                 self.dfs(val,x,y,k)
    13                 val+=1
    14                 break
    15         return
    16     def generateMatrix(self, n):
    17         self.matrix = [[0 for j in range(n) ] for i in range(n)]
    18         self.fx = [[0,1],[1,0],[0,-1],[-1,0]]
    19         self.vis = [[ 0 for j in range(n)]for i in range(n)]
    20         self.n,self.m = n,n
    21         self.dfs(1,0,0,0)
    22         return self.matrix
  • 相关阅读:
    LeetCode偶尔一题 —— 617. 合并二叉树
    《剑指offer》 —— 链表中倒数第k个节点
    《剑指offer》 —— 青蛙跳台阶问题
    《剑指offer》—— 二维数组中的查找
    《剑指offer》—— 替换空格
    《剑指offer》—— 合并两个排序的链表
    《剑指offer》—— 礼物的最大价值
    生成Nuget 源代码包来重用你的Asp.net MVC代码
    Pro ASP.Net Core MVC 6th 第四章
    Pro ASP.NET Core MVC 6th 第三章
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/14536983.html
Copyright © 2011-2022 走看看