力扣每日一题:754. 到达终点数字【数学题】

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 <= 109
  • target != 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

你可能感兴趣的:(leetcode,算法,职场和发展)