leetcode754
//很典型的数学推导 + 简单编程问题 //这个问题转换成1 , 2 ,3 ,...,n添加正负号求和等于t的问题 (这一步在做题的时候想到了),已知t 求解n的这样一个过程 //于是设正数部分是p 负数部分的和是q //有 p + q = s(前n求和) //有 p - q = t //想见得到 s - t = 2q 注意这里2q直接看成偶数即可 等式右边直接看成一个约束条件 因为对于1~n满足这个等式de //q必然小于n 而可以取的又是连续整数 极其和 所以只需要枚举s-t是偶数并且大于等于0成立的最小n即可 //很典型的思路 class Solution { public: int reachNumber(int target) { if(target < 0) target -= 2*target; int index = 1; while(1){ int s = (index + 1) * index / 2; int temp = s - target; if(temp >= 0 && temp % 2 == 0) break; index++; } return index; } };