leetcode(70).258. Add Digits

来源:互联网 发布:幽默淘宝店铺公告范文 编辑:程序博客网 时间:2024/05/21 10:38
题意:

给一个非负整数,将它的各个位的数字相加,重复这个过程,直到得到一个个位数,返回这个数。

初步分析:看到题目说可以用O(1)时间的时候,就知道这个数学题一定是有它的数学规律的。但我挺不喜欢把编程题做成数学题的,都做了十几年了。

我们很明显的发现,这是一个循环的过程,所以可以用循环和递归来做,

来看看要点。

核心的处理是:

while(num > 0)   //各位相加,得到一个新的数{    newnumber += nownumber % 10;    nownumber /= 10;}
我们要重复的进行这个核心的处理:

1 首先给出结束条件: nownumber < 10  (即得到个位数) 。

2给出每次要向下传递的(信息)数据: newnumber(作为下一次的nownumber)

3其实还有一个,就是新的数每次要更新初始值为0


public class Solution {    public int addDigits(int num) { //这个参数对于递归是充分的,所以可以直接对这个函数递归        if (num < 10)    //1 先给出结束条件            return num;               int newnum = 0;    //2 更新操作数据        while (num > 0){   //3 进行操作            newnum += (num % 10);            num /= 10;        }        return addDigits(newnum); //4 进入递归(并传递数据)    }}


0 0