【let code】754.到达终点的最短路长

问题描述:
在这里插入图片描述
问题分析:
1.有题目第n步步长为n可联想等差数列求和;
2.由于在水平面上左右走,故左右会发生对称现象如下(且同一步数可到达位置之间存在差值为2的关系):
第一步可到达:1,-1
第二步可到达:3,1,-1
第三步可到达:6, 4, 2, 0, -2, -4, -6
第四步可到达:10, 8, 6, 4, 2, 0 …
第五步可到达:15, 13, 11, 9, 7, 5, 3, 1…
3.分析如上步数:
首先累加确定到达与目标点最近的数值需要几步;
在确定剩余步数需走几步;
4.
以8为例,累加至最近结果10,首先根据同一步数可达位置差值关系,判断当前步数差值是否为偶数(如若为偶数则表示当前步数直接可达);
以7为例,累加至最近结果为10, 不符合同步差值关系,进行下一步判断:当前步数奇偶性(也可以判断目标结果的奇偶性质),4为偶数则表示差值关系在下一步才生效,所以结果加1;
以5为例,累加至最近结果6, 不符合同步差值关系,判断当前步数奇偶性,3为奇数,则同步差值关系在两步后生效,所以结果加2;
完整代码:

int reachNumber(int target)     
{        
	int sum = 0;        
	target = abs(target);        
	for (int i = 1; ; i++)        
	{            
		sum += i;            
		if (sum == target)                
			return i;            
		else            
		{                
			if (sum > target)                
			{                    
				if (abs(sum - target) % 2 == 0)    return i;                                        
				else  if (i % 2 == 0)   return i+1;                        
				else  return i+2; 
			}                
		}            
	}
	      
	return 1;  
}
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页