Rotate Image Total Accepted: 4289 Total Submissions: 14183 My Submissions
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
旋转矩阵,这个比九度题目1164:旋转矩阵要简单一些。
只是顺时针旋转90度。
假设原矩阵名称为arrayA,旋转后矩阵为arrayB。
举例4*4矩阵并给出旋转示意图,以及关系。
原图:
1、顺时针旋转90图
关系arrayB[i][j] == arrayA[N-j-1][i]
2、顺时针旋转180图
关系arrayB[i][j] == arrayA[N-i-1][N-j-1]
3、顺时针旋转270图
关系arrayB[i][j] == arrayA[j][N-i-1]
LeetCode Java AC
public class Solution {
public void rotate(int[][] matrix) {
if(matrix == null){
return;
}
int n = matrix.length;
int array[][] = new int[n][n];
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
array[i][j] = matrix[n-1-j][i];
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
matrix[i][j] = array[i][j];
}
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int N = scanner.nextInt();
int arrayA[][] = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int num = scanner.nextInt();
arrayA[i][j] = num;
}
}
int arrayB[][] = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int num = scanner.nextInt();
arrayB[i][j] = num;
}
}
int firstNum = revolve0(arrayA,arrayB,N);
int secNum =revolve90(arrayA,arrayB,N);
int thiNum = revolve180(arrayA,arrayB,N);
int fourNum = revolve270(arrayA,arrayB,N);
if (firstNum == -1 && secNum == -1 && thiNum == -1 && fourNum == -1) {
System.out.println(-1);
}else {
List arrayList = new ArrayList();
if (firstNum != -1) {
arrayList.add(firstNum);
}
if (secNum != -1) {
arrayList.add(secNum);
}
if (thiNum != -1) {
arrayList.add(thiNum);
}
if (fourNum != -1) {
arrayList.add(fourNum);
}
Collections.sort(arrayList);
System.out.println(arrayList.get(0));
}
}
}
private static int revolve0(int[][] arrayA, int[][] arrayB, int N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arrayB[i][j] == arrayA[i][j]) {
continue;
}else {
return -1;
}
}
}
return 0;
}
private static int revolve90(int[][] arrayA, int[][] arrayB, int N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arrayB[i][j] == arrayA[N-j-1][i]) {
continue;
}else {
return -1;
}
}
}
return 90;
}
private static int revolve180(int[][] arrayA, int[][] arrayB, int N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arrayB[i][j] == arrayA[N-i-1][N-j-1]) {
continue;
}else {
return -1;
}
}
}
return 180;
}
private static int revolve270(int[][] arrayA, int[][] arrayB, int N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arrayB[i][j] == arrayA[j][N-i-1]) {
continue;
}else {
return -1;
}
}
}
return 270;
}
}
/**************************************************************
Problem: 1164
User: wzqwsrf
Language: Java
Result: Accepted
Time:110 ms
Memory:18660 kb
****************************************************************/
更多推荐
Java矩阵旋转270_矩阵旋转系列之LeetCode/Rotate Image && Jobdu/题目1164:旋转矩阵 | 学步园...
发布评论