LeetCode刷题之HOT100之旋转图像

2024-06-04 12:28

本文主要是介绍LeetCode刷题之HOT100之旋转图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2024/6/4 昨晚在实验室待到很晚才回去,回去看会《万历十五年》就睡了,现在又来了,看了一下昨天做的题目的题解过程,稍微理解了深度优先搜索和回溯思想,那么现在,继续今天的刷题。

1、题目描述

在这里插入图片描述

2、逻辑分析

从数组来到了矩阵,焕然一新的感觉。 看到矩阵旋转,就可以找到规律。
[[1,2,3],[4,5,6],[7,8,9]] 变成 [[7,4,1],[8,5,2],[9,6,3]]规律是显而易见滴。
在这里就可以用一句概括:对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个 位置
那么怎么解决该题呢?用代码来表示就是在 m a t r i x [ r o w ] [ c o l ] matrix[row][col] matrix[row][col] 的元素在旋转后变成 m a t r i x n e w [ c o l ] [ n − r o w − 1 ] matrix_{new}[col][n-row-1] matrixnew[col][nrow1],以此为条件来用代码实现

3、代码演示

public void rotate(int[][] matrix) {// 获取矩阵的行数(也是列数,因为矩阵是方阵)int n = matrix.length;// 创建一个新的二维数组来存储旋转后的结果int [][] newMatrix = new int[n][n];// 遍历原矩阵的每一个元素for(int i = 0; i < n; i++){for(int j = 0; j < n ; j++){// 将原矩阵的元素旋转90度后放到新矩阵的对应位置  // 注意这里j是行索引,n - i - 1是列索引,因为矩阵旋转后,行变成列,列变成行,并且行和列的索引都需要反向 newMatrix[j][n - i - 1] = matrix[i][j];}}// 将新矩阵的值复制回原矩阵,实现原地旋转的效果(但实际上是使用了额外空间的)for(int i = 0; i < n; i++ ){for(int j = 0; j < n; j++){matrix[i][j] = newMatrix[i][j];}}}

理解了规律。实现起来就简单多了,这题还是挺简单的,时间复杂度: O ( N 2 ) O(N^2) O(N2),空间复杂度: O ( N 2 ) O(N^2) O(N2)
欧克,这题先这样,我得做被安排的任务去啦,拜拜!

这篇关于LeetCode刷题之HOT100之旋转图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030081

相关文章

计算绕原点旋转某角度后的点的坐标

问题: A点(x, y)按顺时针旋转 theta 角度后点的坐标为A1点(x1,y1)  ,求x1 y1坐标用(x,y)和 theta 来表示 方法一: 设 OA 向量和x轴的角度为 alpha , 那么顺时针转过 theta后 ,OA1 向量和x轴的角度为 (alpha - theta) 。 使用圆的参数方程来表示点坐标。A的坐标可以表示为: \[\left\{ {\begin{ar

KLayout ------ 旋转物体90度并做平移

KLayout ------ 旋转创建的物体 正文 正文 前段时间,有个小伙伴留言问我,KLayout 中如何旋转自己创建的物体,这里特来说明一下。 import pyapoly = pya.DPolygon([pya.DPoint(0, 0), pya.DPoint(0, 5), pya

LeetCode--231 2的幂

题目 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16示例 3:输入: 218输出: false class Solution {public:bool isPowerOfTwo(int n) {if (n <= 0) return fals

LeetCode--234 回文链表

题目 请判断一个链表是否为回文链表。 示例 示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val

LeetCode--220 存在重复元素 III

题目 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。 示例 示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例

LeetCode--217 存在重复元素

题目 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true class Solution {p

LeetCode--214 最短回文串

题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 示例 1:输入: "aacecaaa"输出: "aaacecaaa"示例 2:输入: "abcd"输出: "dcbabcd" 思路: 我们需要添加多少个字符与给定字符串的前缀子串回文的长度有关. 也就是说去掉其前缀的回文子串,我们只需要补充剩下的子串的逆序

LeetCode--206 反转链表

题目 反转一个单链表。 示例 示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL class Solution {public:ListNode* reverseList(ListNode* head) {if (head == nullptr || head->next == nullptr){return head;}ListNo

LeetCode--204 计数质数

题目 统计所有小于非负整数 n 的质数的数量。 示例 示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 class Solution {public:int countPrimes(int n) {if (n <= 2) return 0;int cnt = 0;vector<bool> isPrime(n, true);

LeetCode--198 打家劫舍

题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 =