• 11/8 <matrix> LC 48 54 59


    48. Rotate Image

    先按对角线对称图形,再水平对折。

    class Solution {
        public void rotate(int[][] matrix) {
            //1.transpose
            for(int i = 0; i < matrix.length; i++){
                for(int j = 0; j < i; j++){
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = temp;
                }
            }
            //flip the matrix horizontally
            for(int i = 0; i < matrix.length; i++){
                for(int j = 0; j < matrix[0].length / 2; j++){
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[i][matrix[0].length - 1 -j];
                    matrix[i][matrix[0].length - 1 -j] = temp;
                }
            }
        }
    }

    54. Spiral Matrix

    从右到左,从下到上的时候,注意保证不重复。

    class Solution {
        public List<Integer> spiralOrder(int[][] matrix) {
            List<Integer> res = new ArrayList<Integer>();
            if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
                return res;
            int rowBegin = 0, rowEnd = matrix.length - 1, colBegin = 0, colEnd = matrix[0].length - 1;
            while(rowBegin <= rowEnd && colBegin <= colEnd){
                //to right
                for(int j = colBegin; j <= colEnd; j++)  res.add(matrix[rowBegin][j]);
                rowBegin++;
                
                for(int i = rowBegin; i <= rowEnd; i++)  res.add(matrix[i][colEnd]);
                colEnd--;
                
                
                for(int j = colEnd; j >= colBegin && rowBegin <= rowEnd; j--)  res.add(matrix[rowEnd][j]);
                rowEnd--;
                
                for(int i = rowEnd; i >= rowBegin && colBegin <= colEnd; i--) res.add(matrix[i][colBegin]);
                colBegin++;
            }
            return res;
        }
    }

    59. Spiral Matrix II

    规则的放入数字,不需要第三四步判断是否超出边界。

    class Solution {
        public int[][] generateMatrix(int n) {
            if(n == 0)
                return null;
            int[][] matrix = new int[n][n];
            int rowBegin = 0, rowEnd = n - 1, colBegin = 0, colEnd = n - 1;
            int count = 0;
            while(rowBegin <= rowEnd && colBegin <= colEnd){
                //right
                for(int j = colBegin; j <= colEnd; j++)
                    matrix[rowBegin][j] = ++count;
                rowBegin++;
                
                //down
                for(int i = rowBegin; i <= rowEnd; i++)
                    matrix[i][colEnd] = ++count;
                colEnd--;
                
                //left
                for(int j = colEnd; j >= colBegin; j--)
                    matrix[rowEnd][j] = ++count;
                rowEnd--;
                
                //up
                for(int i = rowEnd; i >= rowBegin; i--)
                    matrix[i][colBegin] = ++count;
                colBegin++;
            }
            return matrix;
        }
    }
  • 相关阅读:
    安装VMware Workstation提示the msi failed的解决办法
    windows2008中没有右键个性化
    delphi调用AdoQuery实现SqlSever的存储过程(返回)
    delphi 如何解决假死
    用A4打印总账,预览及打印无表头。。
    解决VMWare“Could not get vmci driver version句柄无效”的错误
    第一章 认识jQuery
    jQuery $.each用法
    jquery ui tabs详解(中文)
    javascript面向对象
  • 原文地址:https://www.cnblogs.com/Afei-1123/p/11822813.html
Copyright © 2020-2023  润新知