258. Add Digits
来源:互联网 发布:通达信数据导出 编辑:程序博客网 时间:2024/06/18 09:39
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.
运行结果:
这种方式可以解决该问题,但严重影响到了效率!不但用到了循环,而且还用到了递归算法。那么,应该怎样解决该问题呢?
看到规律了吗 result = 1+(num -1)%9;
For example: Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
一:算法实现:
#include<stdio.h>#include<stdlib.h>int addDigits(int num){int sum = 0;if (num < 10)return num;while (num >= 1){sum += num % 10;num /= 10;}addDigits(sum);}int main(){int num;printf("请输入一个数字:");scanf_s("%d", &num);printf("num = %d\tresult = %d\n", num, addDigits(num));system("pause");}
运行结果:
请输入一个数字:38num = 38 result = 2请按任意键继续. . .
这种方式可以解决该问题,但严重影响到了效率!不但用到了循环,而且还用到了递归算法。那么,应该怎样解决该问题呢?
二 算法优化:
题目中提醒我们可以不用循环或者递归实现该算法吗,既然这么说了,那么一定有能够解决该算法的方法,但是一眼望去很是迷茫,不如输入一百个数字,统计一下规律:
num = 1 result = 1num = 2 result = 2num = 3 result = 3num = 4 result = 4num = 5 result = 5num = 6 result = 6num = 7 result = 7num = 8 result = 8num = 9 result = 9num = 10 result = 1num = 11 result = 2num = 12 result = 3num = 13 result = 4num = 14 result = 5num = 15 result = 6num = 16 result = 7num = 17 result = 8num = 18 result = 9num = 19 result = 1num = 20 result = 2num = 21 result = 3num = 22 result = 4num = 23 result = 5num = 24 result = 6num = 25 result = 7num = 26 result = 8num = 27 result = 9num = 28 result = 1num = 29 result = 2num = 30 result = 3num = 31 result = 4num = 32 result = 5num = 33 result = 6num = 34 result = 7num = 35 result = 8num = 36 result = 9num = 37 result = 1num = 38 result = 2num = 39 result = 3num = 40 result = 4num = 41 result = 5num = 42 result = 6num = 43 result = 7num = 44 result = 8num = 45 result = 9num = 46 result = 1num = 47 result = 2num = 48 result = 3num = 49 result = 4num = 50 result = 5num = 51 result = 6num = 52 result = 7num = 53 result = 8num = 54 result = 9num = 55 result = 1num = 56 result = 2num = 57 result = 3num = 58 result = 4num = 59 result = 5num = 60 result = 6num = 61 result = 7num = 62 result = 8num = 63 result = 9num = 64 result = 1num = 65 result = 2num = 66 result = 3num = 67 result = 4num = 68 result = 5num = 69 result = 6num = 70 result = 7num = 71 result = 8num = 72 result = 9num = 73 result = 1num = 74 result = 2num = 75 result = 3num = 76 result = 4num = 77 result = 5num = 78 result = 6num = 79 result = 7num = 80 result = 8num = 81 result = 9num = 82 result = 1num = 83 result = 2num = 84 result = 3num = 85 result = 4num = 86 result = 5num = 87 result = 6num = 88 result = 7num = 89 result = 8num = 90 result = 9num = 91 result = 1num = 92 result = 2num = 93 result = 3num = 94 result = 4num = 95 result = 5num = 96 result = 6num = 97 result = 7num = 98 result = 8num = 99 result = 9请按任意键继续. . .
看到规律了吗 result = 1+(num -1)%9;
改进的算法:
int addDigits(int num){return 1 + (num - 1) % 9;}
0 0
- 258.Add Digits
- 【LeetCode】258.Add Digits
- 258. Add Digits
- LeetCode 258. Add Digits
- 258. Add Digits
- LeetCode : 258. Add Digits
- 258. Add Digits
- 258. Add Digits
- 258. Add Digits
- 258. Add Digits
- 258. Add Digits
- leetCode 258. Add Digits
- LeetCode 258. Add Digits
- 258. Add Digits LeetCode
- 258. Add Digits
- 258. Add Digits
- LeetCode 258. Add Digits
- 258. Add Digits
- Java - 多线程通信
- Scrapy教程1--7
- 电感的主要参数
- Unicode_String Ansi_String 内核字符串操作
- UI控件--上下文Menu
- 258. Add Digits
- Oracle10g以后的语法
- 压缩感知中的数学知识:稀疏、范数、符号arg min
- 组合模式(Composite)
- 分享 原生javaScript实现的楼层导航功能
- 2016 Y Combinator Winter 13家机器学习&数据分析初创公司
- shape的使用(全圆角、部分圆角)
- iOS 企业级开发证书发布权限问题
- XAudio2学习之组合音频方法作为操作集