zoukankan      html  css  js  c++  java
  • 螺旋矩阵

    题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 

    实例:

    输入:
    [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    输出: [1,2,3,6,9,8,7,4,5]      




    思路:想用一个对应矩阵全至0,然后右下左上这样寻路,走过至为1,结果遇到了越界的情况,尴尬的是我还不会处理这种情况,先留个坑。。

    参考一下别人的思路,还是厉害。。。

    class Solution:
        def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
            r, i, j, di, dj = [], 0, 0, 0, 1
            if matrix != []:
                for _ in range(len(matrix) * len(matrix[0])):
                    r.append(matrix[i][j])
                    matrix[i][j] = 0
                    if matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])] == 0:
                        di, dj = dj, -di
                    i += di
                    j += dj
            return r

    这里说一下我早上碰到一些的坑。。

    首先想创建一个矩阵,你如果直接用=的话,是引用地址,所以更改也会更改原矩阵。这个叫浅拷贝

    当然深拷贝很棒,无后顾之忧,但是你copy的对象必须是不能改变的,另外这个处理也很慢

    还有赋值的问题,二维数组赋值,容易给多个地方的元素赋同一值,对这也是因为他是浅拷贝的原因

    写法可以改为

    flag=[[0 for i in range(col)] for i in range(row)]

    这样就欧凯了

    对,这里还学了_在循环里面指的是一个无意义的值,以后用不上,用下划线代替

    再来一个,测试类的写法

    class Solution:
        def spiralOrder(self, matrix):
            r, i, j, di, dj = [], 0, 0, 0, 1
            if matrix != []:
                for a in range(len(matrix) * len(matrix[0])):
                    r.append(matrix[i][j])
                    matrix[i][j] = 0
                    if matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])] == 0:
                        di, dj = dj, -di
                    i += di
                    j += dj
            return r
    
    if __name__ == "__main__":
        b=Solution()
        p=b.spiralOrder(matrix=[[1,2,3],[4,5,6],[7,8,9]])
        print(p)

    记住先实例化,这里跟java思想一致。

  • 相关阅读:
    mybatis 插件的原理-责任链和动态代理的体现
    优雅的对象转换解决方案-MapStruct使用进阶(二)
    将博客搬至CSDN
    python headers missing
    Gvim:unable to load python
    gvim keil 快捷跳转至出现错误(警告)行
    stm32 堆溢出
    keil在线烧录突然提示 No target connected #
    cygwin vim can't write .viminfo
    切换用户后,/etc/profile的配置不起效
  • 原文地址:https://www.cnblogs.com/dmndxld/p/10809489.html
Copyright © 2011-2022 走看看