[LeetCode] Add Digits 加数字
Given a non-negative integer num
, repeatedly add all its digits until the result has only one digit.
Example:
Input:38
Output: 2
Explanation: The process is like:3 + 8 = 11
,1 + 1 = 2
.
Since2
has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
Hint:
- A naive implementation of the above process is trivial. Could you come up with other methods?
- What are all the possible results?
- How do they occur, periodically or randomly?
- You may find this Wikipedia article useful.
这道题让我们求数根,所谓树根,就是将大于10的数的各个位上的数字相加,若结果还大于0的话,则继续相加,直到数字小于10为止。那么根据这个性质,我们可以写出一个解法如下:
解法一:
class Solution {
public:
int addDigits(int num) {
while (num / > ) {
int sum = ;
while (num > ) {
sum += num % ;
num /= ;
}
num = sum;
}
return num;
}
};
但是这个解法在出题人看来又trivial又naive,需要想点高逼格的解法,一行搞定碉堡了,那么我们先来观察1到20的所有的树根:
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 1
11 2
12 3
13 4
14 5
15 6
16 7
17 8
18 9
19 1
20 2
根据上面的列举,我们可以得出规律,每9个一循环,所有大于9的数的树根都是对9取余,那么对于等于9的数对9取余就是0了,为了得到其本身,而且同样也要对大于9的数适用,我们就用(n-1)%9+1这个表达式来包括所有的情况。还有个特殊情况需要考虑一下,当num为0的时候,那么就会出现 -1 % 9 的情况,这个其实挺烦人的,因为C++和Java会给出商0余-1的结果,而Python会给出商-1余8的结果,博主搜了一下,好像是说当有一个负数存在的时候,C++/Java会尽可能让商大一些,而Python会让商小一些,所以结果不统一就神烦,那么只好做个额外判断了,特殊处理一下0的情况就OK了,所以解法如下:
解法二:
class Solution {
public:
int addDigits(int num) {
return (num == ) ? : (num - ) % + ;
}
};
类似题目:
参考资料:
https://leetcode.com/problems/add-digits/
LeetCode All in One 题目讲解汇总(持续更新中...)
最新文章
- UiAutomator环境搭建及详细操作
- QtCreator动态编译jsoncpp完美支持x86和arm平台
- 解读vmstat中的ACTIVE/INACTIVE MEMORY
- 全局变量 urllib模块 json模块
- Codeforces Round #309 (Div. 2) B. Ohana Cleans Up 字符串水题
- git如何ignore
- Bitmap 和Drawable 的区别
- iOS开发UI篇-懒加载、重写setter方法赋值
- 遍历GridView
- Java面试题合集(二)
- bzoj [HNOI2008]Cards
- openlayers4 入门开发系列之地图展示篇(附源码下载)
- 关于dom&;bom
- C# Winform 中使用FTP实现软件自动更新功能
- Struts框架(6)---action接收请求参数
- 使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)
- KinectFusion测试
- 用Java批量重命名文件
- 2012 - AD GC全局编录服务器(Global Catalog)
- Javac语法糖之TryCatchFinally
热门文章
- The Java Enum: A Singleton Pattern [reproduced]
- 简简单单学会C#位运算
- 【转】Asp.net MVC定义短网址
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 2
- .NET Core全面扫盲贴
- getJson
- android权限
- SSH中Action的单例与多例
- java访问修饰符
- 解决 Tomcat Server in Eclipse unable to start within 45 seconds 不能启动的问题