牛客NC18 顺时针旋转矩阵【中等 数学 Java/Go/PHP/C++】

题目


题目链接:

https://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc

https://www.lintcode.com/problem/161/

思路

Java代码

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param mat int整型二维数组
     * @param n int整型
     * @return int整型二维数组
     */
    public int[][] rotateMatrix (int[][] mat, int n) {
        //1:水平翻转
        //rs:当前处理的第一行,re:当前处理的最后一行
        int rs = 0, re = n - 1;
        while (rs <= re) {
            //col:当前处理的第col列,rs行和re行的col的数进行交换
            for (int col = 0; col < n ; col++) {
                int t = mat[rs][col];
                mat[rs][col] = mat[re][col];
                mat[re][col] = t;
            }

            rs++;
            re--;
        }

        //2.主对角线翻转
        for (int i = 0; i < n ; i++) {
            for (int j = 0; j < i ; j++) {
                int t = mat[i][j];
                mat[i][j] = mat[j][i];
                mat[j][i] = t;
            }
        }
        return mat;
    }
}

Go代码

go 复制代码
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param mat int整型二维数组
 * @param n int整型
 * @return int整型二维数组
 */
func rotateMatrix(mat [][]int, n int) [][]int {
	//1.水平翻转
	rs := 0
	re := n - 1
	for rs <= re {
		for col := 0; col < n; col++ {
			tmp := mat[rs][col]
			mat[rs][col] = mat[re][col]
			mat[re][col] = tmp
		}
		rs++
		re--
	}

	//2.对角线翻转
	for i := 0; i < n; i++ {
		for j := 0; j < i; j++ {
			tmp := mat[i][j]
			mat[i][j] = mat[j][i]
			mat[j][i] = tmp
		}
	}

	return mat
}

PHP代码

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param mat int整型二维数组 
 * @param n int整型 
 * @return int整型二维数组
 */
function rotateMatrix( $mat ,  $n )
{
    //水平翻转
    $rs=0;
    $re = $n-1;
    while ($rs<=$re){

        for($col=0;$col<$n;$col++){
            $tmp = $mat[$rs][$col];
            $mat[$rs][$col] = $mat[$re][$col];
            $mat[$re][$col] = $tmp;
        }
        $rs++;
        $re--;
    }

    //对角线翻转
    for($i=0;$i<$n;$i++){
        for($j=0;$j<$i;$j++){
            $tmp = $mat[$i][$j];
            $mat[$i][$j] = $mat[$j][$i];
            $mat[$j][$i] =$tmp;
        }
    }

    return $mat;
}

C++ 代码

cpp 复制代码
#include <bits/types/struct_tm.h>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param mat int整型vector<vector<>> 
     * @param n int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > rotateMatrix(vector<vector<int> >& mat, int n) {
        //水平翻转
        int rs=0,re =n-1;
        while(rs<=re){
            for(int c=0;c<n;c++){
                int tmp = mat[rs][c];
                mat[rs][c] = mat[re][c];
                mat[re][c] =tmp;
            }

            rs++;
            re--;
        }
        //对角线翻转
        for(int i=0;i<n;i++){
            for(int j=0;j<i;j++){
                int tmp = mat[i][j];
                mat[i][j]=mat[j][i];
                mat[j][i]=tmp;
            }
        }    
        return mat;
    }
};
相关推荐
Ldawn_AI2 小时前
4+ 图论高级算法
算法·深度优先·图论
Xの哲學2 小时前
Linux PCI 子系统:工作原理与实现机制深度分析
linux·网络·算法·架构·边缘计算
NuyoahC3 小时前
笔试——Day46
c++·算法·笔试
Keying,,,,4 小时前
力扣hot100 | 图论 | 200. 岛屿数量、994. 腐烂的橘子、207. 课程表、208. 实现 Trie (前缀树)
算法·leetcode·图论
cwplh5 小时前
Codeforces1043 A至F 题解
算法
楼田莉子5 小时前
C++算法学习专题:滑动窗口
开发语言·数据结构·c++·学习·算法·leetcode
2501_924731115 小时前
智慧矿山误报率↓83%!陌讯多模态融合算法在矿用设备监控的落地优化
人工智能·算法·目标检测·视觉检测
zh_xuan6 小时前
LeeCode 40.组合总和II
c语言·数据结构·算法
都叫我大帅哥7 小时前
动态规划:从懵逼到装逼,一篇让你彻底搞懂DP的终极指南
java·算法
艾莉丝努力练剑8 小时前
《递归与迭代:从斐波那契到汉诺塔的算法精髓》
c语言·学习·算法