希望大神给个题解(Java)
给定一个边长为len的表格,把它按边长gridLen来划分为若干等分的格栅。(len为gridLen的整数倍长)。
* 请计算进行格栅化之后,给定的坐标(x,y)出于第几个格栅。格栅编号从1开始
* 如:以下为边长6的表格,格栅边长为3.其中(1,5)出于第二个格栅。输出2
* 请计算进行格栅化之后,给定的坐标(x,y)出于第几个格栅。格栅编号从1开始
* 如:以下为边长6的表格,格栅边长为3.其中(1,5)出于第二个格栅。输出2
全部评论
public static int solution(int len, int gridLen, int x, int y) {
//每一行或者每一列有多少个格栅
int per = len / gridLen;
//这个行列是格栅的行列 都是从一开始算起
int row = x / gridLen + 1;
int col = y / gridLen + 1;
int res;
if (row == 1) {
res = col;
} else {
res = per * (row - 1) + col;
}
return res;
}
大概花十分钟,想想,直接看坐标到编号区块的关系看不出来。就引入两个中间量m,n代表行列所划分的区块数。然后设点为x,y,然后就有区块位置为(x/m,y/n)向下取整。得到区块坐标。区块坐标再转换为编号。想一想。坐标转编号公式应该是x*m+y+1,从一开始。
int n = len / gridLen,边长为len的表格可以看做二维数组,x / gridLen * n + y / gridLen + 1 算出来就是第几个格栅。
相关推荐