NC18:顺时针旋转矩阵

顺时针旋转矩阵

http://www.nowcoder.com/questionTerminal/2e95333fbdd4451395066957e24909cc

解法1:一层一层循环,坐标变换

import java.util.*;

public class Solution {
    public int[][] rotateMatrix(int[][] mat, int n) {
        // write code here

        int tR=0;
        int tC=0;
        int dR=n-1;
        int dC=n-1;
        while(tR<dR){
            for(int i=0;i<dC-tC;i++){
                int tmp=mat[tR][tC+i];
                mat[tR][tC+i]=mat[dR-i][tC];
                mat[dR-i][tC]=mat[dR][dC-i];
                mat[dR][dC-i]=mat[tR+i][dC];
                mat[tR+i][dC]=tmp;
            }
            tR++;
            tC++;
            dR--;
            dC--;
        }
        return mat;
    }
}

解法2:做两次翻转,先沿右上-左下的对角线翻转,再沿水平中线上下翻转
即:对于函数中的一个点,先以y=x为轴作对称,然后以x轴作对称,则相当于该点顺时针旋转90°。所以对于图像来说每个点顺时针旋转了,则图也旋转了。所以可以将图以对角线作对称,然后以中间的横线作对称。
图片说明

import java.util.*;
public class Rotate {
    public int[][] rotateMatrix(int[][] mat, int n) {
        // write code here

        // 对角线
        for(int i=0; i<n;i++) {
            for(int j=i+1; j< n; j++) {
                int temp = mat[i][j];
                mat[i][j] = mat[j][i];
                mat[j][i] = temp;
            }
        }

        // 以竖轴翻转
        for(int i=0;i<n;i++) {
            for(int j=0; j< n/2; j++) {
                int temp = mat[i][j];
                mat[i][j] = mat[i][n-1-j];
                mat[i][n-1-j] = temp;
            }
        }
        return mat;
    }
}

解法3:找规律:mat[i][j]被旋转到了mat[j][n-i-1]的位置

import java.util.*;

public class Rotate {
    public int[][] rotateMatrix(int[][] mat, int n) {
        // write code here
        int[][] temp=new int[n][n];

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                temp[j][n-1-i]=mat[i][j];               
            }
        }       
        return temp;   
    }
}
名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论
反转两次 妙啊
点赞 回复 分享
发布于 2021-04-13 00:23

相关推荐

09-08 17:17
同济大学 Java
狗不理fe:里面的人劝一句,别来虾,我们部门24校招生淘汰率30%,还有一些人说有一年保护期,不可能!!!
我的秋招日记
点赞 评论 收藏
分享
珩珺:那些经历都太大太空了,实习的情况不了解,大创项目连名字、背景、目的及意义都没体现出来;地摊经济更是看完连卖的什么产品都不知道,项目成果直接写营收多少都更直观真实一点;后面那个校文体部的更是工作内容是组织活动整理流程,成果变成了当志愿者,而且你们学校本科学生会大一入学就直接当部长吗,志愿里面还提到了疫情防控,全面解封是22年12月的事情,可能时间上也有冲突。可能你花了钱人家就用AI给你随便写了点内容改了一下,没什么体现个性化的点
点赞 评论 收藏
分享
评论
20
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务