题意:平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。
你可以按照下面的规则在平面上移动:
每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。
必须按照数组中出现的顺序来访问这些点。
【一句话解析】:每次计算两个坐标的最短路径,先斜着走,再水平or竖直走,两部分距离相加,就是最终结果。
【用到的库函数】:math.min、abs、max。
class Solution {
public int minTimeToVisitAllPoints(int[][] points) {
int sum=0;
int min1=0;
int min2=0;
for(int i=0;i<points.length-1;i++){
min1=Math.min(Math.abs(points[i][0]-points[i+1][0]),Math.abs(points[i][1]-points[i+1][1]));
//min1用来计算斜着走,需要多少步长才能到达和目标点一样的x轴或者y轴
min2=Math.max(Math.abs(points[i][0]-points[i+1][0]),Math.abs(points[i][1]-points[i+1][1]))-min1;
//到达相同的x或者y轴之后,只需要沿着网格走,就是最短路径。min2用来计算沿着走的步长,减去min1的原因是因为斜着走的时候,x/y轴都在增加。
sum=sum+min1+min2;
}
return sum;
}
}