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;
}
阅读更多
文章标签: 算法学习
个人分类: 算法学习
上一篇C语言指针笔记之 一级指针的应用(指针做函数参数)
下一篇leetcode题库之257
想对作者说点什么? 我来说一句

LeetCode题库答案(数据库)

2018年04月28日 416KB 下载

LeetCodet题解(C++版)

2018年03月06日 1002KB 下载

leetcode题解PDF版

2015年05月14日 1.03MB 下载

leetcode经典题目全解析

2018年05月27日 1.09MB 下载

leetcode试题的答案

2018年01月14日 101KB 下载

LeetCode各公司题目合集

2018年01月17日 590KB 下载

leetcode题解

2015年09月15日 1.28MB 下载

leetcode java解答答案

2015年12月20日 36KB 下载

没有更多推荐了,返回首页

关闭
关闭