LeetCode刷题之路 到达终点数字

到达终点数字【简单】

题目描述

在一根无限长的数轴上,你站在0的位置。终点在target的位置。

每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。

返回到达终点需要的最小移动次数。

示例 1:

输入: target = 3
输出: 2
解释:
第一次移动,从 0 到 1 。
第二次移动,从 1 到 3 。

示例 2:

输入: target = 2
输出: 3
解释:
第一次移动,从 0 到 1 。
第二次移动,从 1 到 -1 。
第三次移动,从 -1 到 2 。

注意:

  • target是在[-10^9, 10^9]范围中的非零整数。

解题思路

首先要明确一点的是target不管是是正数或者是负数所走的步数都是一样的,无非就是把整式的左右两边都取反,比如说:1-2+3=2和-1+2-3=-2步数一样,所以我们一律按正数做。通过观察思考,我们可以得出:-1和1相差2,-2和2相差4,依此类推······我们就拥有了2~2n(步数为n)所有的偶数,假如我们每一步都走正值的话,直到步数之和sum比target大为止,然后用sum-target所得的结果如果为偶数的话,我们就可以通过调整前面几步的方向来抵消这个数,所以步数为n。但是,如果sum-target的结果为奇数呢?这样的话我们只需要看下一步是否为奇数步,如果为奇数步的话,用sum-tanget+(n+1)(也就是再走一步)的结果不就又是偶数,所以最终结果为n+1步。照这样的思路推下去,如果下一步为偶数步的话,则只需要再多走两步便可以使sum-target的结果又为偶数,所以最终结果是n+2步。

class Solution:
    def reachNumber(self, target):
        """
        :type target: int
        :rtype: int
        """
        sum = 0
        n = 0
        target = abs(target)
        while(1):
            if sum >= target:
                if sum == target or (sum - target) % 2 == 0:
                    return n
                elif n % 2 == 0:
                    return n + 1
                else:
                    return n + 2
            n = n + 1    
            sum = sum + n
另一种解题思路

这种方法和第一种方法的思路大致一样,用等差数列求和 n(n+1)/2=target 反算出n,然后直接转换为整型去掉多余部分,就得到了一个最接近target的一个步数n。然后利用这个n直接求和,再进行累加判断,节省了资源。

class Solution:
    def reachNumber(self, target):
        """
        :type target: int
        :rtype: int
        """
        target = abs(target)
        n = math.sqrt(2*target+0.25)-0.5;
        n = int(n)
        sum = (n*n+n)/2
        while(sum < target or (sum - target) % 2 != 0):
            n = n + 1
            sum = sum + n
        return n
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,333评论 0 2
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 18,861评论 1 19
  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,140评论 0 3
  • 最近正在找实习,发现自己的算法实在是不能再渣渣,在网上查了一下,发现大家都在刷leetcode的题,于是乎本渣渣也...
    caoxian阅读 888评论 0 2
  • 我走过草坪,有阳光尾随 走进大海,和城市告别 跌落沙滩,风也憩息 满身咸湿,沙器人生 然后,摇摇晃晃,喝醉了,也是...
    玺州阅读 162评论 0 0