二维网格迁移

题目描述

给你一个 m 行 n 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。

每次「迁移」操作将会引发下述活动:

位于 grid[i][j] 的元素将会移动到 grid[i][j + 1]。

位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0]。

位于 grid[m - 1][n - 1] 的元素将会移动到 grid[0][0]。

请你返回 k 次迁移操作后最终得到的 二维网格。

LeetCode地址

输入输出规模

m == grid.length

n == grid[i].length

1 <= m <= 50

1 <= n <= 50

-1000 <= grid[i][j] <= 1000

0 <= k <= 100

思路

1.简单模拟

最朴素的思路为,按照题目给出的坐标变换公式,执行k次。但根据给出的输入输出规模,发现对于极端输入,操作在10^8次数量级。显然存在更合理的公式去描述进行k次变化后,各个元素的位置。

2.规律公式

  1. 列的变化:列变化的规律比较简单,迁移k次,就朝右移动k次,考虑到二维网格的周期性,这里需要取膜,即new_col = (ori_col + k) % num_col
  2. 行的变化:行的行为稍微复杂一些。我们可以发现,当列每迁移num_col次时,行就会向下移动一格。那么我们首先计算,行向下移动的绝对距离:d_row = (ori_col + k) / num_col, 然后将这个值加上原来的行号,再进行取模就得到了k次迁移后的行号:(d_row+ori_row) % num_row

代码

Golang版本
func shiftGrid(grid [][]int, k int) [][]int {
n, m := len(grid), len(grid[0]);
ans := make([][]int, n);
for i := range ans{
ans[i] = make([]int, m);
}
//fill
for i, row := range grid{
for j, item := range row{
new_col, new_row := (j+k) % m, (i+(j+k)/m)%n;
ans[new_row][new_col] = item;
}
}
return ans;
}

[LC1260]二维网格迁移的更多相关文章

  1. UDF——处理二维网格的利器:Boost.Geometry库

    本文编译工具:VC++ UDF Studio 该插件可以直接在Visual Studio中一键编译.加载.调试UDF源码,极大提高编写排错效率,且支持C++,MFC,Windows API和第三方库, ...

  2. fluent meshing导入二维网格

    meshing导入二维网格"> fluent meshing只能在Dimension为3D时才能使用 meshing导入二维网格"> 其实也可以导入二维网格,具体操作见 ...

  3. ICEM二维网格

    非结构网格 结构网格 拓扑 拓扑完建立part边界条件,然后创建block 拓扑完后进行边界条件关联 全局网格设置

  4. leetcode-163周赛-1260-二维网格迁移

    题目描述: 自己的提交: class Solution: def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int] ...

  5. leetcode1260二维网络迁移

    题目 n*m的矩阵,一个整数k,移动矩阵k次.每次移动的操作为: 向右移动(最后一列移动到第一列) 之后,第一列向下移动. 1<=N.M<=50 0<=k<=100 题解 思考 ...

  6. CSS Grid基于网格的二维布局系统(详细教程)

    .grid-wrap{ display: inline-flex; padding: 20px; background: #f4f4f4; word-break: initial; } .handle ...

  7. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

  8. c#中使用NetCDF存储二维数据的读写操作简单应用

                      [DllImport(                   [DllImport(                  [DllImport(             ...

  9. [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀

    题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...

  10. 基于zxing的二维码(网格)扫描

    基于zxing的二维码(网格)扫描 前言:对于二维码扫描我们使用的是开源框架Zxing或者Zbar,这里使用基于zxing的二维码扫描,类似支付宝网格扫描, 二维码原理介绍: 二维码是用某种特定的几何 ...

随机推荐

  1. mysql重置id排列重新排序

    1.删除表中的原有的主键字段 ALTER TABLE table2 DROP id 2.表中重新创建一个字段 ALTER TABLE table2 ADD id int NOT NULL FIRST; ...

  2. 2个月搞定计算机二级C语言——真题(7)解析

    1. 前言 本篇我们讲解2个月搞定计算机二级C语言--真题7 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include <stdio.h> int fun(char* s, ...

  3. ClickHouse-查询优化

    单表查询[使用的频率高] 1.prewhere代表where Prewhere 和 where 语句的作用相同,用来过滤数据.不同之处在于 prewhere 只支持*MergeTree 族系列引擎的表 ...

  4. js获取nginx服务器时间

    前端页面js获取nginx服务器时间在实际开发中,我们通常要使用的是服务器端的时间,而不是本机电脑的时间,在js文件中直接通过new Date()获取的时间是本机电脑的系统时间,获取服务器时间的方法如 ...

  5. Surface pro 11二合一平板参数调研

    最近研究了下Surface pro 11,记录下相关参数,矩阵我以表格列出来.可能不够细,大家作个参考吧 模块 技术项 参数 备注 处理器 型号 Snapdragon X Elite(X1E-80-1 ...

  6. GAN和CGAN——生成式对抗网络和条件生成式对抗网络

    GAN的定义 GAN是一个评估和学习生成模型的框架.生成模型的目标是学习到输入样本的分布,用来生成样本.GAN和传统的生成模型不同,使用两个内置模型以"对抗"的方式来使学习分布不断 ...

  7. 617. 合并二叉树 Golang实现

    题目描述: 给你两棵二叉树: root1 和 root2 . 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会).你需要将这两棵树合并成一棵新二叉树.合并的规则是: ...

  8. 运维工具之saltstack

    参考:https://www.cnblogs.com/xintiao-/p/10380656.html saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现 ...

  9. 代码质量审查工具之SonarQube8.9(LTS)与gitlab CI集成使用

    官网地址: https://docs.sonarqube.org/8.9/analysis/scan/sonarscanner/ 目标:在push时自动触发GitLab CI/CD pipeline ...

  10. Git之message提交

    作用 编写格式化的 commit message 能够大大提高代码的维护效率. 比如: 可以提供更多的历史信息,方便快速浏览: 可以过滤某些 commit(比如文档改动),便于快速查找信息: 可以直接 ...