leetcode题库之258

258/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 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.

中文翻译:给定一个正数,将其所有位数上的数字进行相加得到一个新的数。不断反复,直到得到的数是一位数的。

解题思路:
1.先要保存好num各位上的数字
2.将保持好的数字进行相加得到新的num
3.反复操作,直到num满足只有一位数的要求

一开始是先想到要用到数组来对各位数的数进行存储,程序写好后想对代码进行优化,想了一下发现其实可以不需要用到数组,只用一个辅助变量其实就能实现。改完后百度了一下,发现还有一个更简单的方法,其实该题是有规律的。。。

最开始的程序算法:

int addDigits(int num) {
    int i=0,j=0;
    int tem = num;
    int a[100];
    while((num/10)>0)     //遍历num各位上的数字,并存放在数组a中
    {
        while((tem/10)>0)   
        {
            a[i] = tem%10;
            tem=tem/10;
            i++;
        }
        for(j=0;j<i;j++)   //将存储好的数字分别相加得到新的num
        {
            tem+=a[j];
        }
        i=0;              //数组下标置0,重复对num各位数字的遍历
        num=tem;
    }
    return num;
}

优化了下代码:

int addDigits(int num) {
    int tem=0;
    while((num/10)>0)
    {
        while((num/10)>0)    //遍历num每位的数字
        {
            tem+= num%10;   //得出num各位上的数字后直接相加
            num=num/10;
        }
        num+=tem;
        tem=0;
    }
    return num;
}

根据规律来实现:

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

你可能感兴趣的:(算法学习)