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

  • 相关阅读:
    24张图,九大数据结构安排得明明白白
    mysql中的mvcc解读
    常见电商项目的数据库表设计(MySQL版)
    两万字深度介绍分布式系统原理,一文入魂
    使用消息中间件时,如何保证消息仅仅被消费一次?
    GCC/G++选项 -Wl,-Bstatic和-Wl,-Bdynamic
    sql 练习
    设计模式-单例模式
    设计模式-抽象工厂模式
    设计模式-工厂方法模式
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12551646.html
Copyright © 2011-2022 走看看