https://leetcode.com/contest/weekly-contest-65/problems/reach-a-number/

class Solution {
public:
    int reachNumber(int target) {
        if (target == 0) return 0;
        if (target < 0) 
            target *= -1;
        int remain = target;
        int step = 0;
        bool odd = (target & 1);
        while(remain > 0) {
            step++;
            remain -= step;
        }
        int pattern = step % 4;
        int pattern2 = pattern % 2;
        printf("%d %d %d\n", step, pattern, pattern2);
        if (odd) {
            if ((pattern == 1) || (pattern == 2))
                return step;
            else {
                if (pattern == 0)
                    return (step + 1);
                if (pattern == 3)
                    return (step + 2);
            }
        } else {
            if ((pattern == 0) || (pattern == 3))
                return step;
            else {
                if (pattern == 1)
                    return (step + 2);
                if (pattern == 2)
                    return (step + 1);
            }
        }

        return step;
    }
};

留言

這個網誌中的熱門文章

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/longest-univalue-path/

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/maximum-sum-of-3-non-overlapping-subarrays/