cv的一天,图来自0x3fendlesscheng - 力扣(LeetCode)
- func reachNumber(target int) int {
- if target < 0 {
- target *= -1
- }
- sum := 0
- ans := 0
- for sum < target || (sum - target) %2 != 0 {
- // 1. 先把sum累加大于target再说
- // 2. 如果刚好等于target那就退出去了就不用走了
- // 3. 如果大于target则如果距离是奇数只需要往回走一步然后再走回来就行了(多循环一次)
- // 4. 如果大于target且距离是奇数且已经往回走了一步然后回来还是超了距离为奇数,那么就再循环一次,必得偶数,
- // 如果是偶数那就可以了,假设本来往右走4步超target距离是偶数,现在是偶数,就只要有一步往左走,然后三步往右走就行了
- ans++
- sum += ans // 1+2+3+...+n
- }
- return ans
- }