LeetCode 754 到达终点数字[数学 贪心] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 754 到达终点数字[数学 贪心] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
刚看到这道题,顿时想到了BFS,直接上模板,代码如下:

class Solution 
public:
    int reachNumber(int target) 
        queue<int> q;
        q.push(0);
        int step = 0;
        while(!q.empty()) 
            step ++;
            int len = q.size();
            for(int i = 0; i < len; i ++) 
                int site = q.front();
                q.pop();
                int site1 = site + step;
                int site2 = site - step;
                if(site1 == target || site2 == target) 
                    return step;
                
                q.push(site1);
                q.push(site2);
            
        
        return step;
    
;

很显然出错了,因为做了太多了无意义的计算,所以我们要从推理的角度出发,首先无论target的正负,都是相同的步骤到达,无非是另一个步骤反过来了而已,所以先把target取绝对值,然后不断加,直到超过target或者正好到达,如果sum与target的差值为偶数,那么只要将中间的step/2取反就好,如果是奇数,很明显可以通过step走到target-1,那么往回走一步再向前走一步就能到达,即step+2,但如果step为偶数,那么向前走k+1与target的差值为偶数,那么中间(k+1+dist)/2取反就好,这样为step+1步,代码如下:

class Solution 
public:
    int reachNumber(int target) 
        target = abs(target);
        int step = 0;
        int sum = 0;
        while(sum < target) 
            step ++;
            sum += step;
        
        int dist = sum - target;
        if(dist % 2 == 0) return step;
        else 
            if(step % 2 == 0) return step + 1;
            else return step + 2;
        
    
;

以上是关于LeetCode 754 到达终点数字[数学 贪心] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 780 到达终点[数学] HERODING的LeetCode之路

LeetCode 789 逃脱阻碍者[数学] HERODING的LeetCode之路

LeetCode题解:跳跃游戏II

cqyz oj | 潜水比赛 | 贪心

LeetCode 517. 超级洗衣机(贪心,不太理解)/ 223. 矩形面积 / 1436. 旅行终点站

LeetCode练习目录