问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3668 访问。

给定一个 n × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 度。

说明:

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

给定 matrix = 

[

  [1,2,3],

  [4,5,6],

  [7,8,9]

],

原地旋转输入矩阵,使其变为:

[

  [7,4,1],

  [8,5,2],

  [9,6,3]

]

给定 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]

]


You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Note:

You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

Given input matrix = 

[

  [1,2,3],

  [4,5,6],

  [7,8,9]

],

rotate the input matrix in-place such that it becomes:

[

  [7,4,1],

  [8,5,2],

  [9,6,3]

]

Given input matrix =

[

  [ 5, 1, 9,11],

  [ 2, 4, 8,10],

  [13, 3, 6, 7],

  [15,14,12,16]

],

rotate the input matrix in-place such that it becomes:

[

  [15,13, 2, 5],

  [14, 3, 4, 1],

  [12, 6, 8, 9],

  [16, 7,10,11]

]


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3668 访问

public class Program {

    public static void Main(string[] args) {
var matrix = new int[,] {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
}; Rotate(matrix);
ShowArray(matrix); matrix = new int[,] {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 }
}; Rotate2(matrix);
ShowArray(matrix); Console.ReadKey();
} private static void ShowArray(int[,] matrix) {
var length = matrix.GetLength(0);
for(var i = 0; i < length; i++) {
for(var j = 0; j < length; j++) {
Console.Write($"{ matrix[i, j]} ");
}
Console.WriteLine();
}
Console.WriteLine();
} public static void Rotate(int[,] matrix) {
var length = matrix.GetLength(0);
for(var i = 0; i < length; i++) {
for(var j = i; j < length; j++) {
var swap = matrix[i, j];
matrix[i, j] = matrix[j, i];
matrix[j, i] = swap;
}
}
for(var i = 0; i < length; i++) {
for(var j = 0; j < length / 2; j++) {
var swap = matrix[i, j];
matrix[i, j] = matrix[i, length - j - 1];
matrix[i, length - j - 1] = swap;
}
}
} public static void Rotate2(int[,] matrix) {
var length = matrix.GetLength(0);
for(var i = 0; i < length / 2; i++) {
for(var j = i + 1; j < length - i; j++) {
var swap = matrix[i, j];
matrix[i, j] = matrix[length - 1 - j, i];
matrix[length - 1 - j, i] = matrix[length - 1 - i, length - 1 - j];
matrix[length - 1 - i, length - 1 - j] = matrix[j, length - 1 - i];
matrix[j, length - 1 - i] = swap;
}
}
} }

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3668 访问

7 4 1
8 5 2
9 6 3 13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4

分析:

显而易见,Rotate 和 Rotate2 的时间复杂度均为: 

C#LeetCode刷题之#48-旋转图像(Rotate Image)的更多相关文章

  1. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  2. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  3. leetcode刷题目录

    leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...

  4. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

  5. C#LeetCode刷题-字典树

    字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树)   48.6% 中等 211 添加与搜索单词 - 数据结构设计   39.9% 中等 212 单词搜索 II   27.9% ...

  6. C#LeetCode刷题-设计

    设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制   33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索 ...

  7. C#LeetCode刷题-树

    树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历   61.6% 中等 95 不同的二叉搜索树 II   43.4% 中等 96 不同的二叉搜索树   51.6% 中等 98 验证二叉搜索树 ...

  8. C#LeetCode刷题-排序

    排序篇 # 题名 刷题 通过率 难度 56 合并区间   31.2% 中等 57 插入区间   30.4% 困难 75 颜色分类   48.6% 中等 147 对链表进行插入排序   50.7% 中等 ...

  9. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配   17.8% 困难 45 跳跃游戏 II   25.5% 困难 55 跳跃游戏   30.6% 中等 122 买卖股票的最佳时机 II C ...

  10. C#LeetCode刷题-字符串

    字符串篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.6% 中等 5 最长回文子串   22.4% 中等 6 Z字形变换   35.8% 中等 8 字符串转整数 (atoi)   ...

随机推荐

  1. 使用redis完成秒杀系统原理

    假设秒杀商品数为100,list名称为winner_user 参考视频教程:https://www.imooc.com/video/15167

  2. Qt_IO系统_文件

    主要参考: devbean.net 豆子的博客 参考书:<QtCreator 快速入门>第三版 目录 QFile 如何使用QFile QFile 和QFileInfo Demo 文件操作是 ...

  3. GPO - Backup and Restore

    Backup the GPO to a second server is very important. Restore a GPO if necessary. Note: WMI filter an ...

  4. 帮助你更好的理解Spring循环依赖

    网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...

  5. springboot application.yml配置学习

    一.背景 为了更好的使用springboot,所以看一下application.yml配置这块.主要是看数据绑定这块. 主要参考:https://www.hangge.com/blog/cache/d ...

  6. 题解 CF 1372A

    题目 传送门 题意 构造一个长度为n的数组,对于数组中的元素a,b,c,满足\(a+b\neq c\). 思路 直接让数组中的数全部变成1就可以了(其他数也行). 代码 /* * Author :We ...

  7. SmartMS如何使用二次验证码/虚拟MFA/两步验证/谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 SmartMS如何使用二次验证码/虚拟MFA/两步验证/谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无 ...

  8. js用正则表达式查找中文

    var content = "awfjawf测试wfewef"; var ret = /\p{Unified_Ideograph}+/u.exec(content);

  9. Button基本用语

    1.self.btn2 = Button(root,image = photo,command = self.login) 使用 image 图片作为按钮,command 作为响应 2.self.bt ...

  10. PHP popen() 函数

    定义和用法 popen() 函数使用 command 参数打开进程文件指针. 如果出错,该函数返回 FALSE. 语法 popen(command,mode) 参数 描述 command 必需.规定要 ...