leetcode-163周赛-1260-二维网格迁移

题目描述:

 

 

 

 

 

 自己的提交:

class Solution:
    def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
        m,n = len(grid),len(grid[0])
        while k:
            tmp = [[0] * n for _ in range(m)] 
            for i in range(m):
                for j in range(n):
                    if j == 0 and i == 0:
                        tmp[i][j] = grid[m-1][n-1]
                    elif j == 0:
                        tmp[i][j] = grid[i-1][n-1]
                    else:
                        tmp[i][j] = grid[i][j-1]
            grid = tmp
            k -= 1
        return grid

优化:

class Solution:
    def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
        n, m = len(grid), len(grid[0])
        ans = [[0]*m for _ in range(n)]
        for i in range(n):
            for j in range(m):
                p = (i * m + j + k) % (m*n)
                ans[p//m][p%m] = grid[i][j]
        return ans

方法二:

class Solution(object):
    def shiftGrid(self, A, k):
        vals = []
        for r, row in enumerate(A):
            for c, val in enumerate(row):
                vals.append(val)
        
        N = len(A) * len(A[0])
        k %= N
        if k:
            vals = vals[-k:] + vals[:-k]
        else:
            return A
        vals = collections.deque(vals)
        for r, row in enumerate(A):
            for c, v in enumerate(row):
                A[r][c] = vals.popleft()
                
        return A

 

posted @ 2019-11-20 11:16  oldby  阅读(178)  评论(0编辑  收藏  举报