给你一幅由 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]
]
借助数组:
 1 void rotate(int** matrix, int matrixSize, int* matrixColSize)
2 {
3 int matrix_new[matrixSize][matrixColSize[0]];
4
5 for(int i = 0; i < matrixSize; i++)
6 {
7 for(int j = 0; j < matrixColSize[i]; j++)
8 {
9 matrix_new[j][matrixSize - i - 1] = matrix[i][j];
10 }
11 }
12
13 for(int i = 0; i < matrixSize; i++)
14 {
15 for(int j = 0; j < matrixColSize[i]; j++)
16 {
17 matrix[i][j] = matrix_new[i][j];
18 }
19 }
20 }

原地旋转:

例如:1 2 3

           4 5 6

           7 8 9

先转置:1 4 7

              2 5 8

              3 6 9

然后按照列以中心为轴两边值交换:

             7 4 1

             8 5 2

             9 6 3

这里学到了矩阵的原地转置:

 1 for (int i = 0; i < 2; i++)
2 {
3 for (int j = 1; j < 3; j++)
4 {
5 int temp = a[i][j];
6 a[i][j] = a[j][i];
7 a[j][i] = temp;
8
9 }
10 }

题目代码:

 1 void rotate(int** matrix, int matrixSize, int* matrixColSize)
2 {
3 for(int i = 0; i < matrixSize-1; i++)
4 {
5 for(int j = i+1; j < matrixSize; j++)
6 {
7 int temp = matrix[i][j];
8 matrix[i][j] = matrix[j][i];
9 matrix[j][i] = temp;
10 }
11 }
12
13 int mid = matrixSize/2;
14 for(int i = 0; i < matrixSize; i++)
15 {
16 for(int j = 0; j < mid; j++)
17 {
18 int temp = matrix[i][j];
19 matrix[i][j] = matrix[i][matrixSize-1-j];
20 matrix[i][matrixSize-1-j] = temp;
21 }
22 }
23 }
 

旋转矩阵(leetcode4.7每日打卡)的更多相关文章

  1. P1664 每日打卡心情好

    题目背景 在洛谷中,打卡不只是一个简单的鼠标点击动作,通过每天在洛谷打卡,可以清晰地记录下自己在洛谷学习的足迹.通过每天打卡,来不断地暗示自己:我又在洛谷学习了一天,进而帮助自己培养恒心.耐心.细心. ...

  2. (leetcode每日打卡)秋叶收藏集【动态规划】

    LCP 19.秋叶收藏集 题目链接 算法 动态规划 时间复杂度O(n) 1.题目要求最终形成[红.黄.红]三部分,每部分数量可以不相等,问最终调整操作数量最小是多少.这道题一开始考虑暴力去做,枚举两个 ...

  3. jquery制作论坛或社交网站的每天打卡签到特效

    效果:http://hovertree.com/texiao/jquery/50/ 现在许多社区,购物等网站都设置签到功能,打开可以收获经验.虚拟币等,提高用户粘性,增加浏览量,是一个不错的功能.本文 ...

  4. Good Time------打卡让生活更美好

    Section 1团队介绍 Part 1 队员信息 姓名 学号 职务 王怡镔 2016012045 组长 于鑫宇 2016012029 组员 张济吨 2016012072 组员 黄鹤 20160120 ...

  5. 个人作业——week2

    一.发现的功能性bug 1.这个手机客户端的拍照翻译功能虽然能够正确的识别图像,但是不能有效的识别出图像中的文字,给出的提示总是图像识别成功,没有识别到文字,导致这个功能几乎无法使用. 因为刚下载这个 ...

  6. NOIP2016呵呵记

    经过了一年的想象和臆测,经历了学长们的几次考试,通过老师的言语莫名感受过了所谓oi式压力之后,自己的考试也终于到来了. 考前的生活也没有想象中的那么充实,无非跟着神犇刷刷题,讨论算法,学点新技巧,然后 ...

  7. PHP连续签到

    require "./global.php"; $act = isset($_GET['act']) ? $_GET['act'] : "error"; // ...

  8. 凝结时光:ImageMagick 制作 gif

    从去年12.12开始,工作日都会从单位的落地窗向外拍一张照片,有点每日打卡的意思.weekday 是一天不落的,weekend 不是每次都到单位,落了几次. 想法来自上学的时候,有同学在同一个地方,拍 ...

  9. 路漫漫其修远兮,吾将上下而求索--2019OKR规划

    一.前言 加入博客园半年多,认识了很多优秀上进,乐于分享的人,我的男神:EdisonZhou,还有张队长,叶伟民,腾飞,梁桐铭 等等. 半年来写了26篇随笔,我的第一篇随笔 C# DynamicObj ...

  10. 展示博客---Alpha版本展示

    Alpha版本展示 1. 团队成员的简介和个人博客地址,团队的源码仓库地址. 成员 简介 个人博客地址 祁泽文 被动态统计图搞扒下的我 http://www.cnblogs.com/jiaowoxia ...

随机推荐

  1. 用Python语言进行多元时间序列ARIMAX模型分析

    1.ARIMAX模型定义 ARIMAX模型是指带回归项的ARIMA模型,又称扩展的ARIMA模型.回归项的引入有利于提高模型的预测效果.引入的回归项一般是与预测对象(即被解释变量)相关程度较高的变量. ...

  2. 2、Spring之IOC概述

    2.1.IOC思想 2.1.1.传统方式获取资源 组件主动地从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式: 提高了学习成本,同时也降低了开发的效率. 2. ...

  3. 【NestJS系列】核心概念:Module模块

    theme: fancy highlight: atelier-dune-dark 前言 模块指的是使用@Module装饰器修饰的类,每个应用程序至少有一个模块,即根模块.根模块是Nest用于构建应用 ...

  4. AI绘画创意文字全流程揭秘,你的终极文字艺术实操宝典

    本教程收集于:AIGC从入门到精通教程汇总 AIGC技术不断更新迭代,国内出现了越来越多的新玩法,比如最近大家都在热议的AI绘画创意文字. 过去的一周,我把这些新玩法都研究了一遍,并总结了一套完整的制 ...

  5. Excel中的数值四舍五入方法详解

    在日常工作和数据处理中,我们经常需要对数值进行四舍五入操作.Excel作为一款强大的电子表格软件,提供了多种方法来实现数值的四舍五入.本文将介绍Excel中常用的四舍五入函数及其基本使用方法. ROU ...

  6. Vue源码学习(一):数据劫持(对象类型)

    好家伙,了解一下Vue如何实现数据劫持 1.Vue中data的使用 首先,我得搞清楚这玩意的概念,我们先从vue的使用开始吧 想想看,我们平时是如何使用vue的data部分的? 无非是这两种情况 (你 ...

  7. iOS添加图片

    添加一个按钮 将图片添加到

  8. RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo

    前言   目标开发任务还有个功能,就是播放rtsp摄像头,当然为了更好的坐这个个,我们必须支持rtsp播放失败之后重新尝试,比如5s重新尝试打开一次,从而保障联网后重新打开,然后达成这个功能.   D ...

  9. Springboot简单功能示例-1 实现基本WEB服务

    springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot 安装教程 git clone --branch ...

  10. JAVA动态增强一个BaseController的已经存在的接口

    使用场景 前提场景 我们多个系统同时继承了某一个通用系统,通用系统的接口是不会允许随意改变的,其他子系统都依赖于Base系统的通用接口 目标需求场景 但是有一个业务,需要给某一个公共接口增加子系统独有 ...