754. 到达终点数字
中等
235
相关企业
在一根无限长的数轴上,你站在0的位置。终点在target的位置。
你可以做一些数量的移动 numMoves :
i 次移动(从 i == 1 开始,到 i == numMoves ),在选择的方向上走 i 步。给定整数 target ,返回 到达目标所需的 最小 移动次数(即最小 numMoves ) 。
示例 1:
输入: target = 2 输出: 3 解释: 第一次移动,从 0 到 1 。 第二次移动,从 1 到 -1 。 第三次移动,从 -1 到 2 。
示例 2:
输入: target = 3 输出: 2 解释: 第一次移动,从 0 到 1 。 第二次移动,从 1 到 3 。
提示:
-109 <= target <= 109target != 0分析:target是我们目标的点,首先我们得明白,这个target的正负对我们有没有关系,其实这个是没有关系的,我们是从0出发的,从左边或者右边走,都是一样的,所以我们就把target全部取正,我们要求的是最小移动次数。我们移动的记录sum肯定是要大于targe,不然怎么到达target。
其实sum一直往左边移动,就是一个等差数列,sum=1+2+3+4+5+...+k ,d= sum - target ,如果d=0就直接返回 d肯定是等于前面一次的距离的,d= 1+2+3+4+5+...-x+ ...+k 。sum正好相差是两个所以d%2一定要等于0 ,我们知道这个就可以写代码了:
AC代码:
- class Solution {
- public int reachNumber(int target) {
- target = Math.abs(target) ;
- int sum =0 ;
- int step = 0 ;
- while(sum
2!=0){ - step++ ;
- sum+=step ;
- }
-
- return step ;
- }
- }