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
  • 相关阅读:
    using vb.net export a datatable to Excel and save as file
    selection sort with objective c
    stdin和STDIN_FILENO的区别
    stdin和STDIN_FILENO的区别
    linux系统kbhit的几种实现
    成为掌握企业聘用趋势的人才
    linux系统kbhit的几种实现
    c_lflag中ICANON的作用
    常量字符串的问题
    mmsbitfields gcc和vc关于位域那点事
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/14536983.html
Copyright © 2011-2022 走看看