1. 题目

给定一幅由N × N矩阵表示的图像,其中每个像素的大小为4字节,编写一种方法,将图像旋转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]
]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-matrix-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 5776. 判断矩阵经轮转后是否一致

2.1 两次遍历

class Solution {public:void rotate(vector<vector<int>>& matrix) {int i, j, a, b;for(i = 0; i < matrix.size(); ++i){   //对角线交换for(j = 0; j < i; ++j)swap(matrix[i][j], matrix[j][i]);}for(i = 0; i < matrix.size(); ++i){  //每行反转a = 0, b = matrix[0].size()-1;while(a < b)swap(matrix[i][a++], matrix[i][b--]);}}
};

2.2 一次遍历

class Solution {public:void rotate(vector<vector<int>>& matrix) {int i, j, n = matrix.size();for(i = 0; i < n/2; ++i){for(j = i; j < n-i-1; ++j){swp(matrix[i][j], matrix[n-1-j][i]);swp(matrix[n-1-j][i], matrix[n-1-i][n-1-j]);swp(matrix[n-1-i][n-1-j], matrix[j][n-1-i]);}}}inline void swp(int&a, int&b){// b = a^b;// a = a^b;// b = a^b;//或者一行代替a ^= b ^= a ^= b;}
};

程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)相关推荐

  1. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  2. 程序员面试金典面试题 01.06. 字符串压缩

    前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...

  3. 程序员面试金典 - 面试题 01.01. 判定字符是否唯一(位运算,牛)

    1. 题目 实现一个算法,确定一个字符串 s 的所有字符是否全都不同. 示例 1: 输入: s = "leetcode" 输出: false 示例 2: 输入: s = " ...

  4. 程序员面试金典 - 面试题 05.07. 配对交换(位运算)

    1. 题目 配对交换.编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推). 示例1:输入:num = 2(或者0b10)输出 1 (或者 ...

  5. 程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)

    1. 题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = &qu ...

  6. 编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列

    题目难度: 简单 原题链接 题目描述 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. ...

  7. 程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)

    1. 题目 每年,政府都会公布一万个最常见的婴儿名字和它们出现的频率,也就是同名婴儿的数量. 有些名字有多种拼法,例如,John 和 Jon 本质上是相同的名字,但被当成了两个名字公布出来. 给定两个 ...

  8. 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)

    1. 题目 无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1:输入:S = "qwe"输出:["qwe", & ...

  9. 程序员面试金典 - 面试题 16.07. 最大数值(位运算求max)

    1. 题目 编写一个方法,找出两个数字a和b中最大的那一个.不得使用if-else或其他比较运算符. 示例: 输入: a = 1, b = 2 输出: 2 2. 解题 有符号整型数的二进制最高位存储的 ...

最新文章

  1. 测试开发人员与开发人员_如何升级为开发人员
  2. 成功解决:利用编程向数据库插入一条记录,而从数据库中查不到该条记录
  3. openwrt 安装尔雅云_[网络]openwrt的阿里云编译
  4. rnn神经网络模型_一文读懂序列建模(deeplearning.ai)之循环神经网络(RNNs)
  5. grep 命令的 12 个实例
  6. Linux下Samba服务器搭建
  7. stm32F051系列教程 前哨篇 建立一个KEIL工程模板
  8. Pulseaudio之libsndfile for android(二十)
  9. 人脸方向学习(二十一):Face Landmark Detection-FAB-解读
  10. 容器技术Docker K8s 5 容器技术在阿里巴巴落地历程
  11. 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
  12. 商品详情页代码html,商品详情页food.vue
  13. 用计算机算出手机机主的名字,号码归属地查询及姓名?电话号码查询机主姓名?输入手机号知道机主?手机号码归属地查询姓名...
  14. 中国移动(ECIA)云网工程师技术知识-立哥技术
  15. python中linspace函数_Python numpy.linspace函数方法的使用
  16. [COGS755]山海经
  17. 华为双前置摄像头_华为nova7 Pro的前置是两个摄像头吗?自拍功能咋样
  18. 全球与中国聚 (3,4-亚乙基二氧噻吩) (PEDOT)市场“十四五”规划及远景目标的建议报告2022-2028年
  19. 软连接ln -s 创建以及删除
  20. RK3326 8.1系统定制化通用修改

热门文章

  1. python数据分析知识点_Python数据分析--Pandas知识点(三)
  2. LInux:shell 彩色进度条实现(有图有代码有真相!!!)
  3. Mybatis一级缓存和二级缓存 Redis缓存
  4. layui 在springboot2.x 时,页面展示不了layui的问题
  5. 树莓派安装CentOS
  6. C. Jon Snow and his Favourite Number DP + 注意数值大小
  7. js中this和回调方法循环-我们到底能走多远系列(35)
  8. 汇顶科技2021秋招笔试
  9. hp-socket 文本跟图片同时发送_文本、截图和应用,这样「包装」一秒变美观
  10. linux java远程调试_idea远程linux代码调试