【Leetcode_easy】754. Reach a Number

problem

754. Reach a Number

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;

原文地址:https://www.cnblogs.com/happyamyhope/p/11171610.html