【LeetCode】48 Rotate Image 【九度】题目1164:旋转矩阵

2024-08-25 12:32

本文主要是介绍【LeetCode】48 Rotate Image 【九度】题目1164:旋转矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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];}}}
}
九度 题目1164:旋转矩阵 Java AC
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<Integer> arrayList = new ArrayList<Integer>();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: 1164User: wzqwsrfLanguage: JavaResult: AcceptedTime:110 msMemory:18660 kb
****************************************************************/

这篇关于【LeetCode】48 Rotate Image 【九度】题目1164:旋转矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105559

相关文章

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点