阅读 67

上机题 leetcode 题目 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数 并且时间和空间复杂度都为o(1)

示例

输入: 38
输出: 2 
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
复制代码

从题目我们可以知道该题主要是将一个数字的各个位置进行相加,最后得出相加的值不小于10的数字 这时候我们假设该数字是一个三位数 abc%9 = (99a+9b+a+b+c)%9 = (a+b+c)%9:

  • 若a+b+c < 9,则a+b+c =  (a+b+c)%9 = abc%9 即为结果;
  • 若a+b+c > 9,令de = a+b+c,de%9 = (d+e)%9:
  • 若d+e > 9,令fg = d + e,fg%9 = (f+g)%9:
  • .... ....若干步后,一定有【xy%9 = (x+y)%9 = 9】即为结果或【xy%9 = (x+y)%9 <9】
  • 故当abc%9 = 0,结果为9;当abc%9 != 0时,则结果为abc%9。

即result = num % 9 ==0 ? 9 : num%9。 代码如下

QQ图片20210531144236.png 有更好的解法,欢迎评论指导

文章分类
后端
文章标签