zoukankan      html  css  js  c++  java
  • leetcode1260二维网络迁移

    题目

    n*m的矩阵,一个整数k,移动矩阵k次。每次移动的操作为:

    • 向右移动(最后一列移动到第一列)
    • 之后,第一列向下移动。

    1<=N、M<=50
    0<=k<=100

    题解

    思考:
    从总体思考:相当于向右移动k%m列;另mod=k%m,donw=k/m。则如果mod为0,则所有列都下移donw行。否则,前mod列移动donw+1行,后面的向下移动donw行。

    代码上实现如下:向右tmp[i][(j+k)%grid[0].length]=grid[i][j];,向下grid[(i+downTimes)%grid.length][j]=tmp[i][j];
    这样避免实际根据k一个一个移动,时间复杂度为O(N*M)。

    public List<List<Integer>> shiftGrid(int[][] grid, int k) {
        int[][] tmp=new int[grid.length][grid[0].length];
        for (int i = 0; i < grid.length; i++) {//每行都向右移动k个单位
            for (int j = 0; j < grid[0].length; j++) {
                tmp[i][(j+k)%grid[0].length]=grid[i][j];
            }
        }
        //向下的列数
        int donw=k/grid[0].length;
        int mod=k%grid[0].length;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                int downTimes=donw;
                if(j<mod){
                    downTimes++;
                }
                grid[(i+downTimes)%grid.length][j]=tmp[i][j];
            }
        }
        //转化为输出要求的格式
        List<List<Integer>> res=new ArrayList<>(grid.length);
        for (int i = 0; i < grid.length; i++) {
            List<Integer> list=new ArrayList<>(grid[0].length);
            for (int j = 0; j < grid[0].length; j++) {
                list.add(grid[i][j]);
            }
            res.add(list);
        }
        return res;
    }
    
  • 相关阅读:
    CentOS 7.X 关闭SELinux
    删除或重命名文件夹和文件的方法
    centos7-每天定时备份 mysql数据库
    centos7 tar.gz zip 解压命令
    MySQL5.6/5.7/8.0版本授权用户远程连接
    下载CentOS7系统
    使用js实现tab页签切换效果
    sql优化常用的几种方法
    mysql 多表联查的快速查询(索引)
    【图论】强连通分量+tarjan算法
  • 原文地址:https://www.cnblogs.com/FannyChung/p/leetcode1260.html
Copyright © 2011-2022 走看看