美文网首页
Leetcode258. Add Digits计算数字根

Leetcode258. Add Digits计算数字根

作者: anshi | 来源:发表于2017-03-10 21:04 被阅读0次

普通思路就是数字拆分字符串再转数字一一相加,并递归了。代码如下
function addDigits(num) { if (num < 10) { return num; } var result = 0; (num + '').split('').forEach(item => { result = parseInt(item, 10) + result }); return addDigits(result); }

提交查看结果:


普通结果.png

运行时间还属于中等偏长的,时间复杂度也是O(n);
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
尝试用eval,但是提示eval坏处大,不让用...

吾辈没有不同常人的大脑,所以只能各种情况枚举,猜想其中是否有什么不得了的规矩,可以让人一下子就能得到答案?

addDigits(23) //=>5
addDigits(2019) //=>3
addDigits(666) //=>9
addDigits(987654321) //=>9

我们发现,这些数返回值都是0-9的整数(废话),假设我认为他们一定又什么规(yin)律(mou),那么损失的数字(初始值与结果的差)是不是有什么规律?

addDigits(23) //=>5 =>18/9=2
addDigits(2019) //=>3 =>2016/9=224
addDigits(666) //=>9 =>657/9=73
addDigits(987654321) //=>9 =>懒得算了...

哇,也就是说 result = num%9???
987654321%9 //=>0???
由于num恰好是9的倍数的情况,所以要进行适当的处理,最终我们结果是
function addDigits(num) { if (num < 10) { return num; } else { return num % 9 || 9; } }
哈哈,应该不错了吧,看看结果。

Paste_Image.png
注:这里第一个if判断应该是<1,提交后beats 80.37%。(原来判断数值大小会差别那么多?)

???前面还这么多人...leetcode不愧都是些厉害的大神...于是我点开discuss看看还有什么不得了的东西。
我们来看看view数排名第一的topic,看id估计还是国人...

Paste_Image.png

那么我们再思考这个公式(1 +(n-1)%9)怎么来呢...我们再思考,对于余数在1-8之间,直接返回即可,但是余数是0的,有两种可能0和9的倍数,那么如何区分这两种可能?但是除以9的余数除了1-8和0之外还有别的可能吗??
没错,就是负数。也就是说我们要至少引进一个负数的结果,那么就要用到减法了。
将 x +(num - x)% 9。x属于正整数。

那我随便来个简单的x,就取值为1吧,来提交试试。

function addDigits(num) { return 1 + (num - 1) % 9; }

Paste_Image.png

喵喵喵?写不下去了...装逼失败...

相关文章

  • Leetcode258. Add Digits计算数字根

    提交查看结果: 运行时间还属于中等偏长的,时间复杂度也是O(n);Follow up:Could you do i...

  • Math

    这是所有类型里我觉得最有趣的一个类型,哈哈。来被虐一下。 258. Add Digits 数字根的性质: 任何数字...

  • Add Digits

    Question: Given a non-negative integer num, repeatedly ad...

  • 258 Add Digits

    原题链接:Add Digits 这是一道数学题,代码如下: 我不讲解这道题,大家直接看下面这张图就能明白了。

  • Leetcode PHP题解--D69 258. Add Dig

    D69 258. Add Digits 题目链接 258. Add Digits 题目分析 给定一个数字,给每一位...

  • 2019-02-02

    LeetCode 258. Add Digits Description Given a non-negative...

  • Day35

    Add Digits思路:不能用循环,一个数的各位数相加,直到相加的和不超过10or x or y 布尔"或"...

  • 258. Add Digits

    258. Add Digits[思路]数字累加,将给定的一个整数,将个位,十位,百位等相加,连续操作,直到最后的值...

  • 258. Add Digits

    循环: 这个办法很神奇

  • 258. Add Digits

    Problem Given a non-negative integer num, repeatedly add ...

网友评论

      本文标题:Leetcode258. Add Digits计算数字根

      本文链接:https://www.haomeiwen.com/subject/czyqgttx.html