博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rotate Image
阅读量:4099 次
发布时间:2019-05-25

本文共 2295 字,大约阅读时间需要 7 分钟。

题目地址:

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.

Example 1:

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

Example 2:

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

这个题目本身不难理解,如果能够再开辟一个n*n的空间出来,其实也不难,难就难在人家要求原地(in-place)旋转。

原地旋转可以这么搞:

  1. 行之间对换:第一行与最后一行对换,第二行与倒数第二行对换,……
  2. 对角元素对换:matrix[i][j]<->matrix[j][i]

直接上例子

原矩阵

147258369

交换行之后:

741852963

对角元素调换:

789456123

好了,大功告成,直接上源码:

public class RotateImage {    public static void rotate(int[][] matrix) {        if (matrix == null)            return;        if (matrix.length == 0)            return;        int begin = 0;        int end = matrix.length - 1;        while (begin < end) {            for (int i = 0; i < matrix.length; i++) {                int tmp = matrix[begin][i];                matrix[begin][i] = matrix[end][i];                matrix[end][i] = tmp;            }            begin++;            end--;        }        for (int i = 0; i < matrix.length; i++) {            for (int j = 0; j < i; j++) {                int tmp = matrix[i][j];                matrix[i][j] = matrix[j][i];                matrix[j][i] = tmp;            }        }    }    public static void printMatrix(int[][] matrix) {        if (matrix == null)            return;        if (matrix.length == 0)            return;        for (int i = 0; i < matrix.length; i++) {            for (int j = 0; j < matrix[i].length; j++) {                System.out.print(matrix[i][j] + " ");            }            System.out.println();        }    }    public static void main(String[] args) {        int[][] matrix = new int[][]{
{
1, 2, 3}, {
4, 5, 6}, {
7, 8, 9}}; System.out.println("-----before rotate------"); printMatrix(matrix); rotate(matrix); System.out.println("-----after rotate-------"); printMatrix(matrix); }}

时间复杂度 O(n2)

转载地址:http://yihii.baihongyu.com/

你可能感兴趣的文章
php7+nginx下安装mysql5.7出现的一些问题及解决/以及一些mysql常用方法
查看>>
多益网络前端面试反思题
查看>>
高效的利用pandas读取多个sheet的excel文件
查看>>
excel宏设置之一键生成多张sheet并写入内容与格式
查看>>
Django model中的 class Meta 详解
查看>>
mysql历史拉链表
查看>>
python查询数据库后生成excel
查看>>
大文件分组上传以及进度条
查看>>
python字符串与时间互相转换
查看>>
HttpResponse和HttpResquest与会话技术
查看>>
前端页面上传文件夹的方法
查看>>
前端页面上传多文件与后台接收
查看>>
查看线上服务器日志
查看>>
怎么高效率批量插入1000条数据到数据库
查看>>
多图片上传后在前端展示
查看>>
js判断上传文件为图片格式、excel格式
查看>>
对上传文件的展示、增删重选功能(前后端代码)
查看>>
python实现八大排序
查看>>
gevent并发查询域名
查看>>
linux常见目录说明
查看>>