LeetCode —— 258

Posted 木道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode —— 258相关的知识,希望对你有一定的参考价值。

和学长聊天的时候,知道了世界上还有一个叫LeetCode的OJ平台,听说相当不错,我暂时弃了九度OJ,开刷LeetCode.

LeetCode最吸引我的地方在于,每一道题都有对应的Discuss,在讨论板块里,有世界各地的优秀程序员发布的解法,可以在里面看到很多优秀的代码,优秀的思想,受益匪浅。

今天分享的题目是题号258 Add Digits

题目的意思很简单,输入一个int型数字num,将num的每个位加起来,重复这个过程,直到结果只有个位数为止,即结果为0~9.

我的第一反应是,写一个循环,一直算,算到结果只有个位数时停止,但这个方法显然效率不高,而且,题目下方的提示说存在O(1)时间的算法。

既然结果只能是0~9,有没有可能是按这个规律一直重复呢?

在草稿纸上写一写:

0~9的结果就是0~9

10~19的结果是1、2、3 …… 9、1

20~29的结果是1、2、3 …… 9、1

可以发现,0属于特殊情况,后面每9个数字就一次循环,1~9一直循环下去,而且结果等于num对9取余,这同样适用于num=0的情况。

拿题目的例子验证一下,38%9=2,看来没错

但其实还存在问题,18%9=0,但18对应的结果应该是9(1+8=9),那么我们可以再稍作修改,结果=(num-1)%9 + 1,这次是正确的。

代码就非常简单了,只需一行:

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

AC

 

以上是关于LeetCode —— 258的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode笔记:Weekly Contest 258(补发)

leetcode258. Add Digits

LeetCode_258_AddDigits

Leetcode -- 258 数位相加

Leetcode刷题记录[python]——258 Add Digits

#Leetcode# 258. Add Digits