栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

初级算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初级算法

1、题目

给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

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

2、解法
from typing import List


class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        
        # mapzip函数解决,这里的matrix[:]应该可以接收一个迭代器所以去掉list也是可以的
        matrix[:]=map(list,zip(*matrix[::-1]))
        matrix[:]=list(map(list,zip(*matrix[::-1])))
        
        # 给原列表添加指定规则的值,最后删除列表每个元素的前n个元素
        n = len(matrix)
        # 从后开始遍历
        for j in range(n-1,-1,-1):
            # 继续从后开始遍历
            for i in range(n-1,-1,-1):
                # 给列表索引为2的元素添加元素,元素为[i][2],i = 2,1,0,也就是列表中每个元素的最后一个值,比如963 852 741
                matrix[j].append(matrix[i][j])
        # 删掉列表中每个元素的前n个元素
        for i in range(n):
            del matrix[i][:n]

        # # 不用原地处理
        a = []
        for i in zip(*matrix):
            print(i)
            a.append([i[x] for x in reversed(range(len(i)))])
        print(a)

        # 优化下代码
        return [[i[x] for x in reversed(range(len(i)))] for i in zip(*matrix)]
    



if __name__ == '__main__':
    matrix = [[1,2,3],[4,5,6],[7,8,9]]
    a = Solution()
    print(a.rotate(matrix))

3、思路

旋转90度,将列横着放,python内置函数中,跟二维数组有关系的,自然是zip,zip可以将行、列华为元组
(1)第一步,通过zip遍历出每列的值
(2)第二步,将每列的值在原地反转:[i[x] for x in reversed(range(len(i)))]

再次整理下,
数组正向查询:for i in range(x),
数组反向查询:for i in reversed(range(x))
数组反向查询: for i in range(x-1,-1,-1)

a = (0, 3, 6)
for i in range(4-1, -1, -1):
    print(i)

for i in range(4):
    print(i)

map、zip求解思路:

# zip(*matrix[::-1] 反转数组,并解包返回迭代器
b = [i for i in zip(*matrix[::-1])]
print(b)
# map(list, zip(*matrix[::-1])) 将zip返回的元组用list函数处理,并重写数组matrix
matrix[:]=map(list,zip(*matrix[::-1]))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号