zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    Protocol Buffer详解
    RPC进阶篇
    RPC基础篇
    测试控制器
    更加简洁的tableview
    storyboard中Unwind segue使用
    IOS开发Apache服务器搭建
    IOS多线程操作
    IOS使用Svn的trunk、branches、tag分别的侧重
    在设计IOSapp时为了代码的扩展性可可维护性需要遵守的原则
  • 原文地址:https://www.cnblogs.com/Afei-1123/p/11822813.html
Copyright © 2011-2022 走看看