[LC1260]二维网格迁移
二维网格迁移
题目描述
给你一个 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 次迁移操作后最终得到的 二维网格。
输入输出规模
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.规律公式
- 列的变化:列变化的规律比较简单,迁移k次,就朝右移动k次,考虑到二维网格的周期性,这里需要取膜,即new_col = (ori_col + k) % num_col
- 行的变化:行的行为稍微复杂一些。我们可以发现,当列每迁移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]二维网格迁移的更多相关文章
- UDF——处理二维网格的利器:Boost.Geometry库
本文编译工具:VC++ UDF Studio 该插件可以直接在Visual Studio中一键编译.加载.调试UDF源码,极大提高编写排错效率,且支持C++,MFC,Windows API和第三方库, ...
- fluent meshing导入二维网格
meshing导入二维网格"> fluent meshing只能在Dimension为3D时才能使用 meshing导入二维网格"> 其实也可以导入二维网格,具体操作见 ...
- ICEM二维网格
非结构网格 结构网格 拓扑 拓扑完建立part边界条件,然后创建block 拓扑完后进行边界条件关联 全局网格设置
- leetcode-163周赛-1260-二维网格迁移
题目描述: 自己的提交: class Solution: def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int] ...
- leetcode1260二维网络迁移
题目 n*m的矩阵,一个整数k,移动矩阵k次.每次移动的操作为: 向右移动(最后一列移动到第一列) 之后,第一列向下移动. 1<=N.M<=50 0<=k<=100 题解 思考 ...
- CSS Grid基于网格的二维布局系统(详细教程)
.grid-wrap{ display: inline-flex; padding: 20px; background: #f4f4f4; word-break: initial; } .handle ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- c#中使用NetCDF存储二维数据的读写操作简单应用
[DllImport( [DllImport( [DllImport( ...
- [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀
题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...
- 基于zxing的二维码(网格)扫描
基于zxing的二维码(网格)扫描 前言:对于二维码扫描我们使用的是开源框架Zxing或者Zbar,这里使用基于zxing的二维码扫描,类似支付宝网格扫描, 二维码原理介绍: 二维码是用某种特定的几何 ...
随机推荐
- css flex布局的使用
felx弹性布局 display:flex; 属性值 flex-direction 属性定义容器要在哪个方向上堆叠 flex 项目.默认为水平方向 row, column 值设置垂直方向.如:flex ...
- Python面向对象小备忘
最近学到面向对象了,感觉到Python这方面的语法也有点神奇,这里专门归纳一下Python面向对象中我觉得比较重要的笔记. 本文目前有的内容:实例属性和类属性的访问,使用@property修饰器 实例 ...
- 好好的Typora收费了!_2022_01_20
好好的Typora收费了!_2022_01_20 用惯了Typora真的很难再去换别的MarkDown编辑工具了,导出都找不到合适的.1.0以前的不需要验证的版本直接就不能打开了,真是头大. 到处找不 ...
- 一文彻底熟练掌握并使用Java的NIO操作
一.基本概念 Java NIO 是 Java 1.4 引入的,用于处理高速.高并发的 I/O 操作.与传统的阻塞 I/O 不同,NIO 支持非阻塞 I/O 和选择器,可以更高效地管理多个通道. 二.核 ...
- Python函数指定参数、返回值类型
def fun(arg1: str, arg2: int ...) -> str: def as_view(name: str, *class_args: int, **class_kwargs ...
- php接收二进制流
/** 二进制流生成文件 * $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input * $GLOBALS['HTTP_RA ...
- BAT之shutdown命令
今天想让电脑开机后固定时间后重启,但之前只用过关机的命令,就去查询资料,并将shutdown的命令用法整体记录一下. 1 ::取消关机 2 shutdown -a 3 4 ::关机 5 shutdow ...
- 使用ssh 通过ProxyCommand:利用跳板机让不在同一局域网的机器ssh直连
打开~/.ssh/config文件,如果没有则新建一个 输入以下内容并保存: Host dxx.sxx-bastion # jumpserver name hostname 54.65.xx.2xx ...
- nsenter 常用操作
nsenter 是一个可以用来进入到目标程序说在 namespace 中运行命令的工具,一般可以用于在容器外 debug 容器中运行的程序.简单记录一下 nsenter 的常用用法. 常用参数 最常用 ...
- Java深度历险(一)——Java字节代码的操纵
[编者按]Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展.但是对于Java语言的深度理解和运用,毕竟是很少会有人涉及的 ...