刷题笔记(数组)-03

Posted 康小庄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题笔记(数组)-03相关的知识,希望对你有一定的参考价值。

题目地址:面试题 01.07. 旋转矩阵 - 力扣(LeetCode) (leetcode-cn.com)

思路:

  • 翻转后的元素的规律是 假如元素是第二列第一个,翻转后会是第二行最后一个!

    		    1 2 3          7 4 1 
                4 5 6   -->    8 5 2
                7 8 9          9 6 3
    
  • 以 2 为例
    翻转前 位置 【0】【1】
    翻转后 位置 【1】【2】

  • 遍历完成之后,再将matrix_new中的结果复制到原数组中即可

class Solution {
    public void rotate(int[][] matrix) {
        //获取数组长度
        int n=matrix.length;
        //定义新的数组
        int [][] matrix_new=new int[n][n];
        //两次循环
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
               matrix_new[j][n-i-1]= matrix[i][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                matrix[i][j]=matrix_new[i][j];
            }
        }
    }
}

题目地址:面试题 01.08. 零矩阵 - 力扣(LeetCode) (leetcode-cn.com)

)

思路

  • 用2个标记数组 记录每一行和每一列是否有0出现 出现就标记数组的位置为true
  • 最后更新原数组
class Solution {
    public void setZeroes(int[][] matrix) {
        
        int m=matrix.length,n=matrix[0].length;
        boolean[] row=new boolean[m];
        boolean[] col=new boolean[n];
       
       for(int i=0;i<m;i++){
           for(int j=0;j<n;j++){
               if(matrix[i][j]==0){
                   row[i]=col[j]=true;
               }
           }
       }
       for(int i=0;i<m;i++){
           for(int j=0;j<n;j++){
               if(row[i]||col[j]){
                   matrix[i][j]=0;
               }
           }
       }
    }
}

代码均由力扣编译器,提交通过,描述编写不当地方还请大家评论区指出!

以上是关于刷题笔记(数组)-03的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-动态规划-day6

LeetCode刷题笔记-动态规划-day6

LeetCode刷题笔记-动态规划-day5

LeetCode刷题笔记-动态规划-day5

LeetCode刷题笔记-动态规划-day5

LeetCode刷题笔记-数据结构-day15