problem
solution1:
class Solution { public: int reachNumber(int target) { target = abs(target); long n = ceil(0.5*(sqrt(1+8.0*target)-1.0)); long sum = n*(n+1)/2; if(sum==target) return n; long d = sum - target; if((d&1) == 0) return n; return n + ((n&1) ? 2 : 1); } };
solution2:
class Solution { public: int reachNumber(int target) { target = abs(target); int res = 0, sum = 0; while(sum<target || (sum-target)%2==1) { res++; sum += res; } return res; } };
solution3:solution1的精简版;
class Solution { public: int reachNumber(int target) { int n = ceil((sqrt(1+8.0*abs(target))-1)/2), d = n*(n+1)*0.5-abs(target); return n + (d%2)*(n%2+1); } };
参考
1. Leetcode_easy_754. Reach a Number;
2. Grandyang;
完