leetcode-Add Digits

来源:互联网 发布:什么是js文件 编辑:程序博客网 时间:2024/06/05 07:43

题目:给定一个非负整数num, 重复将其各个位数上的数字进行求和操作,直到结果为1-9的数(个位数)为止。

比如: 给出num = 38 , 计算过程如下: 3 + 8 = 11 , 1 + 1 = 2,  因为2 为个位数, 返回。

要求:在 不用循环或递归的情况下,时间复杂度为O(1)  ?


一开始,没什么思路,就手动计算几个数看看。

输入:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20......

输出: 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2.......

可以看出,输出结果为9个一循环,所以自然而然想到 以9为底,取余。但这样,9,18,这种9的倍数就为0了,所以要单独加个条件判断。

代码如下:

public class Solution {    public int addDigits(int num) {        if (num < 0 )  return -1;        if (num % 9 == 0 ) return 9 ;        return  num % 9;            }}

这样觉得有点麻烦,看看有没有更高效简短的代码,通过查询讨论区中各大神的方法,看到一种很棒的解法。

public class Solution {    public int addDigits(int num) {        if (num < 0 )  return -1;        return  1 + (num - 1)%9;            }}

通过减1,加1的方式很好的避免了数为9的倍数时,取余为0的尴尬。







0 0
原创粉丝点击