热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

各位相加leetcode解题

各位相加AddDigits题述给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。示例:输入:38输出:2解释:各位相加的过程为:3+811,1+12。由于2是一位




各位相加 Add Digits 题述

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例:

输入: 38

输出: 2

解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。

进阶:

你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?


解题思路及代码

思路一 使用循环解题 :使用循环或递归来解决这个问题是很简单的,只需要 把 输入的非负整数 转变成 字符串

然后 每个字符 取出来 再以 int类型相加 ,

判断加和后的位数,如果不是一位,

再循环一次上面做的事情。这个代码就懒得写了。。

思路二 不使用循环解题 : 此时就需要找数据之间的关系了,

假设我们有个4位数, 1314, 1314= 11000+3100+110+41

换个形式写 就是 1000 a +100 b +10 c + d

我们要求的是 a + b + c+d

这其中的关系就 比较明显了 , 他们相差 999a + 99 b + 9c

3位数: 100 a + 10 b +c

我们要求的是: a + b +c

相差 99 a + 9 b

2位数: 10a+b

要求的是 a+b

相差 9a

1位数: a

要求: a

相差: 0

由此可得一个规律,两位数以上,输入的非负整数 对 它的位数-1个9 求余 可初步得到我们要求的数。

因为我们不仅仅是要简单地把数的 各个位数相加 我们还要一直加,加到结果只是 一位数。

很明显 十以内的数字就是它本身了,但 像 999 或者 998 之类的数字,我们还要接着再运算,

像 999 这种 可以整除 9 的数属于特例, 它的结果肯定是9 ,所以不妨在一开始就将这类数分类处理,

像998 这样的数,在经过对 99 求余之后 ,所剩的数也不会超过两位了,

所以接下来还要对 9 求余数,就可得一位数的解了。

所以,代码思路就是:

输入非负整数num,

先判断,如果 num 大于等于 10:

如果 num 能整除 9

返回 9

如果不能:

就除以 num 最高位数-1 个 9 求其余数

如果余数大于十:

再除一次9

如果余数不大于10:

返回 余数

如果 num 不大于 10:

返回 num

class Solution:
def addDigits(self, num: int) -> int:
if num >=10:
if num%9==0:
return 9
else:
str1 = str(num)
lenth9 = len(str1) - 1
str2 = '9' * lenth9
int9 = int(str2)
res = num % (int9)
if res>=10:
return (res%9)
else:
return res
else:
return num

附图:

在这里插入图片描述



推荐阅读
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 给定行数 numRows,生成帕斯卡三角形的前 numRows 行。例如,当 numRows 为 5 时,返回的结果应为:[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]。 ... [详细]
  • 本文介绍如何在华为CE交换机上配置M-LAG(多链路聚合组),以实现CE1和CE2设备作为VLAN 10网关的高可用性。通过详细的配置步骤,确保网络冗余和稳定性。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • 本文详细介绍了如何使用 MySQL 查询特定时间段的数据,包括今天、本周、上周、本月和上个月的数据。适合对 MySQL 查询感兴趣的读者。 ... [详细]
  • 在网站制作中随时可用的10个 HTML5 代码片段
    HTML很容易写,但创建网页时,您经常需要重复做同样的任务,如创建表单。在这篇文章中,我收集了10个超有用的HTML代码片段,有HTML5启动模板、空白图片、打电话和发短信、自动完 ... [详细]
  • 本文详细介绍了如何在 Objective-C 中使用 @public 和 @protected 修饰符来控制类成员的访问权限。同时,探讨了点语法和箭头操作符的区别,以及属性声明和实现的自动生成。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
author-avatar
秋天的紫丁香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有