258. Add Digits LeetCode
来源:互联网 发布:软件研发过程模型 编辑:程序博客网 时间:2024/05/21 20:24
题意:给你一个数字,然后把数字的每一位拆开相加得到新的数字,不停的重复这个过程知道最后得到的数字只有一位,求这个数字是多少。
题解:假设输入的数字是一个5位数字num,则num的各位分别为a、b、c、d、e。
有如下关系:num = a * 10000 + b * 1000 + c * 100 + d * 10 + e
即:num = (a + b + c + d + e) + (a * 9999 + b * 999 + c * 99 + d * 9)
因为 a * 9999 + b * 999 + c * 99 + d * 9 一定可以被9整除,因此num模除9的结果与 a + b + c + d + e 模除9的结果是一样的。
对数字 a + b + c + d + e 反复执行同类操作,最后的结果就是一个 1-9 的数字加上一串数字,最左边的数字是 1-9 之间的,右侧的数字永远都是可以被9整除的。
这道题最后的目标,就是不断将各位相加,相加到最后,当结果小于10时返回。因为最后结果在1-9之间,得到9之后将不会再对各位进行相加,因此不会出现结果为0的情况。因为 (x + y) % z = (x % z + y % z) % z,又因为 x % z % z = x % z,因此结果为 (num - 1) % 9 + 1,只模除9一次,并将模除后的结果加一返回。
class Solution {public: int addDigits(int num) { if(num % 9 == 0 && num != 0) num = 9; else num %= 9; return num; }};
0 0
- 【LeetCode】258.Add Digits
- LeetCode 258. Add Digits
- LeetCode : 258. Add Digits
- leetCode 258. Add Digits
- LeetCode 258. Add Digits
- 258. Add Digits LeetCode
- LeetCode 258. Add Digits
- LeetCode 258. Add Digits
- leetcode 258. Add Digits
- [LeetCode]258. Add Digits
- LeetCode 258. Add Digits
- <LeetCode>258. Add Digits
- leetcode--258. Add Digits
- LeetCode 258. Add Digits
- LeetCode *** 258. Add Digits
- Leetcode 258. Add Digits
- 258.[LeetCode]Add Digits
- 【leetcode】258. Add Digits
- 用file_get_contents抓取网页乱码的2种解决方式
- poj 2886 Who Gets the Most Candies?(线段树+反素数)
- 广度优先搜索的学习
- 业务中多个人工作间的协作思考
- 103. Binary Tree Zigzag Level Order Traversal
- 258. Add Digits LeetCode
- Hibernate配置文件详解
- Codeforces 618 E . Robot Arm
- 104. Maximum Depth of Binary Tree LeetCode
- 【BZOJ2759】一道动态树的好题
- Maven 项目无法在Ecplise加进tomcat server
- 使用RandomAccessFile API
- 顺序表应用1:多余元素删除之移位算法
- Android中AIDL详解