题目
实现一个算法求一个数字的树根。介绍如下:
- 将一正整数的各个位数相加(即横向相加)后,若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于10为止所得到的数,即为数根。
- 例如对于数字 138,有 1+3+8=12,1+2=3,则 138 的数根为 3。
要求
- Solution 中的 add_digits 方法用于求一个数字的数根。
- add_digits 函数的参数 val 用于指定传入的数字。
- add_digits 函数需要返回找到的数根。
- 如果传入的 val 为 None,需要使用 raise 语句显示 TypeError。
- 如果传入的 val 为负数,需要使用 raise 语句显示 ValueError。
代码实现
class Solution(object):
def add_digits(self, val):
if val is None:
raise TypeError("请传入一个正整数")
if val < 0:
raise ValueError("请传入一个正整数")
while val >= 10:
val = self._sum_cross(val)
return val
def _sum_cross(self, val):
tmp = 0
for i in str(val):
tmp += int(i)
return tmp
改写成递归思路
class Solution(object):
def add_digits(self, val):
if val is None:
raise TypeError("请传入一个正整数")
if val < 0:
raise ValueError("请传入一个正整数")
if val >= 10:
tmp = 0
for i in str(val):
tmp += int(i)
return self.add_digits(tmp)
return val
参考
题目来源于实验楼在线,思路和解答为我自己编写的。
如有侵权,请联系我删除,邮箱:zheng_zhouxia@qq.com
水平有限,有不当之处烦请批评指正!