zoukankan      html  css  js  c++  java
  • 797. 到达一个数字

    797. 到达一个数字

    中文English

    你站在一个无穷数轴上的 0 位置。在位置目标上有一个目标
    在每一个动作中,你可以向左或向右。在第n次移动中(从1开始),你行走n步。
    返回到达目的地所需的最小步骤数。

    样例

    样例1

    输入: target = 3
    输出: 2
    解释:
    在第一步,我们从0到1。
    在第二步,我们从1到3。
    

    样例2

    输入: target = 2
    输出: 3
    解释:
    在第一步,我们从0到1。
    在第二个步骤中,我们从1到-1。
    在第三步,从-1到2。
    

    注意事项

    目标将是一个非零的整数范围[-10^9, 10^9]

    class Solution:
        """
        @param target: the destination
        @return: the minimum number of steps
        """
        '''
        大致步骤:
        1.不管目标是正数还是负数,都可以当做正数来计数,步骤数是一样的
        2.涉及到回退的问题,所以得用另一个方法。首先可以将步数相加,直到大于或等于目标数,然后根据相加得到的步数-目标数 ,如果为偶数的话
        那么偶数/2这个步数需要从正数改为负数,既可以实现双倍的反方向步数。如果为奇数的话,那么需要在加上一个奇数为止(可能下一个数是偶数),直到
        相加得到的步数和-目标数为偶数即可,然后根据之前偶数的方法,将偶数/2正数改为负数即可。
        '''
        def reachNumber(self,target):
            target = abs(target)
    
            count = 0 
            i = 0
            sum = 0
            while  True:
                count += 1
                i += 1
                sum += i
                if sum == target:
                    return count
                elif sum> target:
                    #判断是否步数之和-目标数是否是奇数还是偶数
                    num = sum - target
                    if num%2 == 0:
                        #将num/2这个数符号正数改为负数既可以实现,count不变
                        return count
                    ##如果为奇数的话,不处理,直到步数和-目标数为偶数的时候为止,就会return
                    elif num%2 == 1:
                        continue

  • 相关阅读:
    java内部类与其他类变量之间的调用方式
    java线程数设置和系统cpu的关系
    IDEA设置方法自动显示参数提示
    (十)学生课程表查询
    (九)协处理器
    (八)filter的使用
    (七)多线程写入数据
    (六)mapreduce和Hbase集成
    (五)阅读推荐
    (四)region代码实现
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12551646.html
Copyright © 2011-2022 走看看