LeetCodeDay05

59、螺旋矩阵2 :还是使用螺旋矩阵一的思路,使用上下左右边界,循环完之后改变边界值,由于这题的矩阵中的数是明确的,采用count计数作为跳出循环的条件

需要学习创建新二维数组的方式:matrix=[[0 for _ in range(n)] for _ in range(n)]

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        left=0
        right=n-1
        up=0
        down=n-1
        matrix=[[0 for _ in range(n)] for _ in range(n)]
        i=0
        j=0
        count=1
        while(count<n*n+1):
            for j in range(left,right+1):
                matrix[up][j]=count
                count+=1

            up+=1

            for i in range(up,down+1):
                matrix[i][right]=count
                count+=1

            right-=1

            for j in range(right,left-1,-1):
                matrix[down][j]=count
                count+=1

            down-=1
            for i in range(down,up-1,-1):
                matrix[i][j]=count
                count+=1

            left+=1
        return matrix

289、生命游戏 法一:使用新数组用于记录细胞的生死,在创建时考虑到边界的细胞的处理问题创建了M+2*N+2的数组,根据题意边界用零填充不影响判断。

接下来就是根据逻辑写判断条件,我分为一开始活细胞\死细胞两类。需要注意的是:

        newboard=[[0 for _ in range(n+2)] for _ in range(m+2)]

        还有根据newboard判断时需要注意到board的下标ij都需要加一才能对应上

class Solution:
    def gameOfLife(self, board: List[List[int]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """

        m,n=len(board),len(board[0])
        num=m*n
        flag=[0]*num
        newboard=[[0 for _ in range(n+2)] for _ in range(m+2)]
        for i in range(1,m+1):
            for j in range(1,n+1):
                newboard[i][j]=board[i-1][j-1]
        def aflag(newboard:List[List[int]],i,j)->bool:
            if newboard[i][j]==1:
                count=-1
                for x in  range(-1,2):
                    for y in range(-1,2):
                        if newboard[i+x][j+y]==1:
                            count+=1
                if count==2 or count==3:
                    return 1
                else:
                    return 0
            else:
                count=0
                for x in  range(-1,2):
                    for y in range(-1,2):
                        if newboard[i+x][j+y]==1:
                            count+=1
                if  count==3:
                    return 1
                else:
                    return 0


        for i in range(0,m):
            for j in range(0,n):
                if  aflag(newboard,i+1,j+1):
                    board[i][j]=1
                else :
                    board[i][j]=0
        return board

 方法二  分析题目,细胞前后各有0,1两种状态,则最多有00,01,10,11两种状态 

详见289. 生命游戏 - 力扣(LeetCode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值