2019-04-16 吴亲库里 库里的深夜食堂
求给定一个非负整数,相加各个位上的数,直到值剩下一位返回。

如果不去找到规律的话用迭代或者递归。
/**
* @param Integer $num
* @return Integer
*/
function addDigits($num) {
if($num<10){
return $num;
}
$res=0;
while($num>0){
$res +=$num%10;
$num /=10;
}
return $this->addDigits($res);
}
上面要求我们在O(n)时间内解出,并且不使用循环或者递归。所以我们需要找出规律。

可以看出每九个一个循环,大于9的就是对9进行求余。但是,如果等于9,那么直接求余就是0,对于能被9整除的数如果我们只是直接求余的话那么必要是错误的,所以最后丧心病狂一句话
/**
* @param Integer $num
* @return Integer
*/
function addDigits($num) {
return ($num-1)%9+1;
}
