当前位置: 首页 > news >正文

python每日一题——20旋转图像

题目

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

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

答案

要实现这个题目,我们可以使用递归的方法。具体来说,我们可以将矩阵的每一行看作是一个单独的子矩阵。首先,我们将子矩阵的最后一行(即最初的第 n 列)复制到新的第一行(即旋转后的第 n 列)。然后,我们将子矩阵的最后一列(即最初的第 n 行)复制到新的第一列(即旋转后的第 n 行)。最后,我们将子矩阵本身旋转。这就得到了旋转后的子矩阵。我们可以通过递归地应用这个过程来旋转整个矩阵。

以下是实现这个算法的 Python 代码:

def rotate(matrix):n = len(matrix)# 如果矩阵只有一行或一列,直接反转即可if n == 1:matrix.reverse()return matrix# 将子矩阵的最后一行(即最初的第 n 列)复制到新的第一行(即旋转后的第 n 列)matrix[0][n-1:n] = matrix[0][n-1:n][::-1]# 将子矩阵的最后一列(即最初的第 n 行)复制到新的第一列(即旋转后的第 n 行)for i in range(1, n):matrix[i][0:1] = matrix[i][0:1][::-1]# 递归地旋转子矩阵for i in range(n-1):for j in range(n-1):matrix[i][j+1:n] = matrix[i][j+1:n][::-1]matrix[i+1:n][j] = matrix[i+1:n][j][::-1]return matrix

这个函数首先检查矩阵是否只有一行或一列。如果是这样,它将直接反转矩阵。否则,它将复制最初的第 n 列到新的第一列,复制最初的第 n 行到新的第一行,然后递归地旋转子矩阵。

http://www.lryc.cn/news/251358.html

相关文章:

  • 云计算生成式 -给你不一样的音乐推荐新体验
  • Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器
  • Docker 简介及其常用命令详解
  • 基于PHP的高中生物学习平台
  • Git多库多账号本地SSH连接配置方法
  • 爬虫学习-基础(HTTP原理)
  • Gazebo 中为地面和车轮添加摩擦属性
  • 【重点】【滑动窗口】3. 无重复字符的最长子串
  • python初始化矩阵相关
  • C++ :运算符重载
  • 如何跑通跨窗口渲染:multipleWindow3dScene
  • flutter-web中使用js工具类
  • @ResponseBody详解:用于响应体响应数据
  • 【Python百练——第3练】矩形类及操作
  • 【C语言学习疑难杂症】C语言中数组存储时为什么从低地址到高地址
  • Linux:查看端口占用的进程
  • 医美店会员管理系统预约小程序作用是什么
  • Linux 正则表达式
  • C语言面试之数组指针上篇
  • LinkWeChat,唯一以开源为核心的SCRM
  • Android textView 显示: STRING_TOO_LARGE
  • 用HeidiSQL在MySQL中创建新的数据库
  • 纯前端实现导入excel数据
  • Matlab下载许可证文件 教程(在账号有许可证的前提下)
  • AI 绘画 | Stable Diffusion 电商模特
  • vue面试题整理(1.0)
  • PyQt基础_007_ 按钮类控件QCombox
  • Android Wifi的扫描机制
  • 类 —— 友元、常/静态成员函数
  • 单页面应用