• 处理二维数组两题


    问题一:旋转一个图像,向右旋转90度

      一种思路就是将元素一个一个往右移动,准确计算出位置即可。

      

    //题目6 翻转图像
        public void rotate(int [][] matrix,int n){
            for(int layer=0;layer<n/2;layer++){
                int start=layer;
                int end=n-1-layer;
                for(int i=start;i<end;i++){
                    int offset=i-start;
                    int top=matrix[start][i];
                    
                    matrix[start][i]=matrix[end-offset][start];
                    matrix[end-offset][start]=matrix[end][end-offset];
                    matrix[end][end-offset]=matrix[i][end];
                    matrix[i][end]=top;
                    
                    
                }            
            }        
        }

      另一种思路就是转置后,再横向翻转。

        //转置
        public void transpose(int matrix[][]){
            int temp;
            for(int i=0;i<matrix.length;i++)
                for(int j=0;j<i;j++){
                    temp=matrix[i][j];
                    matrix[i][j]=matrix[j][i];
                    matrix[j][i]=temp;
                }
              
        }
        //逆序
        public void reserve(int matrix[][]){
            int temp;
            for(int i=0;i<matrix.length;i++){
                for(int j=0;j<matrix.length/2;j++){
                    int end=matrix.length-j-1;
                    temp=matrix[i][j];
                    matrix[i][j]=matrix[i][end];
                    matrix[i][end]=temp;
                }
            }
            
        }

      两种复杂度都为O(n*n)

    问题二:二维数组中有0元素,则清零它的行列

      首先记录0的位置,然后第二次遍历的时候清零行列。

      

    //题目7 清0行列
        public void transTozero(int matrix[][]){
            ArrayList<point> al=new ArrayList<point>();
            for(int i=0;i<matrix.length;i++)
                for(int j=0;j<matrix[i].length;j++)
                    if(matrix[i][j]==0)
                        al.add(new point(i,j));
            for(int i=0;i<al.size();i++){
                point p=al.get(i);
                for(int j=0;j<matrix.length;j++){
                    matrix[j][p.getY()]=0;
                }
                for(int j=0;j<matrix[p.getX()].length;j++){
                    matrix[p.getX()][j]=0;
                }
            }
        }

      复杂度O(M*N+k(M+N))

  • 相关阅读:
    数据库设计三大范式
    MYSQL语句
    PHP数据库环境配置
    java空心菱形
    java基础练习2
    java基础练习
    java 控制台输入
    java 基础功能
    Java包装
    JS里的DOM操作注意点
  • 原文地址:https://www.cnblogs.com/chentingk/p/5685762.html
Copyright © 2020-2023  润新知