| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Leetcode0258: 各位相加(simple recursion) -> 正文阅读 |
|
[数据结构与算法]Leetcode0258: 各位相加(simple recursion) |
目录 ? 1. 题目描述
示例 1: 示例 2: 来源:力扣(LeetCode) 2. 解题分析2.1 递归法????????逐位相加,如果结果小于10就返回;否则就针对结果再执行逐位相加;。。。直到最终得到的结果小于10返回。这是典型的递归法的思路。 ? ????????时间复杂度:对于 num 计算一次各位相加需要 的时间。需要几次递归调用能够结束呢。由于0 <= num <= 2**31?- 1=2147483647,所以最大为10位数,且最高位不大于2,所以第一轮各位相加最大可能结果为92,最多还需要两次,所以最大递归调用次数为3次。所以总的时间复杂度仍为 。 ????????空间复杂度:O(1)。存储结果的digitsum以及递归调用的开销均为常数。 2.2 数学方法????????对于给定的自然数,反复将各个位上的数字相加,直到结果为一位数,该一位数被称为原自然数的数根。数根又称数字根(Digital?root),是自然数的一种性质,很显然每个自然数都有唯一一个数根。利用自然数的性质,则能在 O(1) 的时间内计算数根。 ? ? ? ? 设num为n位数,从高位到低位的数字分别记为a0, a1,...,a(n-1),则可以得到: ? ? ? ? 由于(10**i-1)必定是9的倍数,所以,num的各数位之和与num自身是模9同余的,记为: ? ? ? ? 进一步,num_digitsum各数位之和也是与num_digitsum同余的。。。所以,任意自然数num的数根就等于num模9运算的结果?且慢,当num=9时,数根是9而不是0!原因在于要返回的值是10以内,而不是模9运算结果范围的9以内。所以这里还需要进一步的区分讨论,如下所示:
???????? 3. 代码实现
? 本系列总目录: 笨牛慢耕的Leetcode解题笔记(动态更新。。。)https://chenxiaoyuan.blog.csdn.net/article/details/123040889 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 16:57:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |