• 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
  • 相关阅读:
    [蓝桥杯] 第39级台阶
    [蓝桥杯] 马虎的算式
    POJ 1142 Smith Numbers(史密斯数)
    HDU 1181 变形课
    HDU 1728 逃离迷宫
    HDU 2188 悼念512汶川大地震遇难同胞――选拔志愿者 巴什博奕
    HDU 2177 取(2堆)石子游戏 (威佐夫博弈)
    HDU 1847 Good Luck in CET-4 Everybody! 博弈
    HDU 1525 Euclid's Game
    HDU 1517 A Multiplication Game 博弈
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/14536983.html
Copyright © 2020-2023  润新知