LeetCode 258. Add Digits

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.

Follow up:
Could you do it without any loop/recursion in O(1) runtime?

 


题目标签:Math

  如果要满足O(1) 的要求,这里需要用到digital root 公式。

  首先来看一下规律:

  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

  ...

  我们可以发现 digital root 永远是 1 到 9 循环,所以我们可以利用 % 9。

  Step 1: 如果num 是0,那么返回 0;

  Step 2: 如果num 可以被 9 整除,那么返回 9;

  Step 3: 剩下的情况,只要返回 num % 9。

 

 

Java Solution:

Runtime beats 26.24% 

完成日期:06/16/2017

关键词:Digital root

关键点:digital root 从1 到 9 循环 -> 利用 % 9 得到 digital root

复制代码
 1 class Solution 
 2 {
 3     public int addDigits(int num) 
 4     {
 5         if(num == 0)
 6             return 0;
 7         
 8         if(num % 9 == 0)
 9             return 9;
10         
11         return num % 9;
12     }
13 }
复制代码

参考资料:http://www.cnblogs.com/grandyang/p/4741028.html

LeetCode 题目列表 - LeetCode Questions List

题目来源:https://leetcode.com/

posted @   Jimmy_Cheng  阅读(102)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示