LeetCode 754. Reach a Number

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
int reachNumber(int target) {
target = abs(target);
int k = 0, sum = 0;
while (sum < target || (sum - target) & 1)
sum += ++k;
return k;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
int reachNumber(int target) {
target = abs(target);
long n = ceil((-1.0 + sqrt(1 + 8.0 * target)) / 2);
long sum = n * (n + 1) / 2;
if (sum == target) return n;
long diff = sum - target;
if ((diff & 1) == 0) return n;
return n + ((n & 1) ? 2 : 1);
}
};