博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode题集
阅读量:6093 次
发布时间:2019-06-20

本文共 805 字,大约阅读时间需要 2 分钟。

258、给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例:

输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。 进阶: 你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?

一、普通解法(递归)

public static int addDigits(int num) {        if (num < 10){            return num;        }        int temp = num;        int sum = 0;        while (temp != 0){            sum += temp % 10;            temp /= 10;        }        return addDigits(sum);    }复制代码

二、进阶解法

通过枚举发现规律,即若数为9的倍数,则结果为9,若不是则各位相加的结果为对9取余。

public static int addDigits(int num) {        if (num < 10)            return num;        // 取余数        int temp = num % 9;        // 如果该数字对9整除,则返回9        if (temp == 0) {            return 9;        }else {            // 否则是返回各个位数之和与9取余            return temp;        }    }复制代码

转载于:https://juejin.im/post/5bdabfb55188257fa660bff8

你可能感兴趣的文章
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>