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之路