LeetCode刷题指南
第 0 章 hot100
0.1 哈希
0.2 双指针
0.3 滑动窗口
0.4 子串
0.5 普通数组
0.6 矩阵
0.7 链表
0.8 二叉树
0.9 图论
0.10 回溯
0.11 二分查找
0.12 栈
0.13 堆
0.14 贪心算法
0.15 动态规划
0.16 多维动态规划
0.17 技巧
第0-1章 面试经典150
0.1 数组/字符串
0.2 双指针
0.3 滑动窗口
链表
二叉树
第 1 章 最易懂的贪心算法
1.1 算法解释
1.2 分配问题
1.3 区间问题
1.4 练习
第 2 章 玩转双指针
2.1 算法解释
2.2 Two Sum
2.3 归并两个有序数组
2.4 滑动窗口
2.5 快慢指针
2.6 练习
第 3 章 居合斩!二分查找
3.1 算法解释
3.2 求开方
3.3 查找区间
3.4 查找峰值
3.5 旋转数组查找数字
3.6 练习
第 4 章 千奇百怪的排序算法
4.1 常用排序算法
4.2 快速选择
4.3 桶排序
4.4 练习
第 5 章 一切皆可搜索
5.1 算法解释
5.2 深度优先搜索
5.3 回溯法
5.4 广度优先搜索
5.5 练习
第 6 章 深入浅出动态规划
6.1 算法解释
6.2 基本动态规划:一维
6.3 基本动态规划:二维
6.4 分割类型题
6.5 子序列问题
6.6 背包问题
6.7 字符串编辑
6.8 股票交易
6.9 练习
第 7 章 化繁为简的分治法
7.1 算法解释
7.2 表达式问题
7.3 练习
第 8 章 巧解数学问题
8.1 引言
8.2 公倍数与公因数
8.3 质数
8.4 数字处理
8.5 随机与取样
8.6 练习
第 9 章 神奇的位运算
9.1 常用技巧
9.2 位运算基础问题
9.3 二进制特性
9.4 练习
第 10 章 妙用数据结构
10.1 C++ STL
10.2 Python 常用数据结构
10.3 数组
10.4 栈和队列
10.5 单调栈
10.6 优先队列
10.7 双端队列
10.8 哈希表
10.9 多重集合和映射
10.10 前缀和与积分图
10.11 练习
第 11 章 令人头大的字符串
11.1 引言
11.2 字符串比较
11.3 字符串理解
11.4 字符串匹配
11.5 练习
第 12 章 指针三剑客之一:链表
12.1 数据结构介绍
12.2 链表的基本操作
12.3 其它链表技巧
12.4 练习
第 13 章 指针三剑客之二:树
13.1 数据结构介绍
13.2 树的递归
13.3 层次遍历
13.4 前中后序遍历
13.5 二叉查找树
13.6 字典树
13.7 练习
第 14 章 指针三剑客之三:图
14.1 数据结构介绍
14.2 二分图
14.3 拓扑排序
14.4 练习
第 15 章 更加复杂的数据结构
15.1 引言
15.2 并查集
15.3 复合数据结构
15.4 练习
第16章 面试题
第 17 章 十大经典排序算法
README
本文档使用 MrDoc 发布
-
+
首页
8.4 数字处理
# 8.4 数字处理 ## [504. Base 7](https://leetcode.com/problems/base-7/) ### 题目描述 给定一个十进制整数,求它在七进制下的表示。 ### 输入输出样例 输入一个整数,输出一个字符串,表示其七进制。 ``` Input: 100 Output: "202" ``` 在这个样例中,100 的七进制表示法来源于 101 = 2 * 49 + 0 * 7 + 2 * 1。 ### 题解 `进制转换`类型的题,通常是利用除法和取模(mod)来进行计算,同时也要注意一些细节,如负数和零。如果输出是数字类型而非字符串,则也需要考虑是否会超出整数上下界。 ```py def convertToBase7(num: int) -> str: if num == 0: return "0" base7 = "" is_negative = num < 0 num = abs(num) while num: quotient, remainder = num // 7, num % 7 base7 = str(remainder) + base7 num = quotient return "-" + base7 if is_negative else base7 ``` ## [172. Factorial Trailing Zeroes](https://leetcode.com/problems/factorial-trailing-zeroes/) ### 题目描述 给定一个非负整数,判断它的阶乘结果的结尾有几个 0。 ### 输入输出样例 输入一个非负整数,输出一个非负整数,表示输入的阶乘结果的结尾有几个 0。 ``` Input: 12 Output: 2 ``` 在这个样例中,12 != 479001600 的结尾有两个 0。 ### 题解 每个尾部的 0 由 2 × 5 =10 而来,因此我们可以把阶乘的每一个元素拆成质数相乘,统计有多少个 2 和 5。明显的,质因子 2 的数量远多于质因子 5 的数量,因此我们可以只统计阶乘结果里有多少个质因子 5。 ```py def trailingZeroes(n: int) -> int: return 0 if n == 0 else n // 5 + trailingZeroes(n // 5) ``` ## [415. Add Strings](https://leetcode.com/problems/add-strings/) ### 题目描述 给定两个由数字组成的字符串,求它们相加的结果。 ### 输入输出样例 输入是两个字符串,输出是一个整数,表示输入的数字和。 ``` Input: num1 = "99", num2 = "1" Output: 100 ``` 因为相加运算是从后往前进行的,所以可以先翻转字符串,再逐位计算。这种类型的题考察的是细节,如进位、位数差等等。 ### 题解 ```py def addStrings(num1: str, num2: str) -> str: added_str = "" num1 = num1[::-1] num2 = num2[::-1] len1, len2 = len(num1), len(num2) if len1 <= len2: num1, num2 = num2, num1 len1, len2 = len2, len1 add_bit = 0 for i in range(len1): cur_sum = int(num1[i]) + (int(num2[i]) if i < len2 else 0) + add_bit added_str += str(cur_sum % 10) add_bit = int(cur_sum >= 10) if add_bit: added_str += "1" return added_str[::-1] ``` ## [326. Power of Three](https://leetcode.com/problems/power-of-three/) ### 题目描述 判断一个数字是否是 3 的次方。 ### 输入输出样例 输入一个整数,输出一个布尔值。 ``` Input: n = 27 Output: true ``` ### 题解 有两种方法,一种是利用对数。设 log3 n =m,如果 n 是 3 的整数次方,那么 m 一定是整数。 ```py def isPowerOfThree(n: int) -> bool: return n > 0 and math.fmod(math.log10(n) / math.log10(3), 1) == 0 ``` 另一种方法是,因为在 C++ int 范围内 3 的最大次方是 $3^{19} = 1162261467$,如果 n 是 3 的整数次方,那么 1162261467 除以 n 的余数一定是零;反之亦然。然而对于 Python 来说,因为 int 理论上可以取无穷大,我们只能循环判断。 ```py def isPowerOfThree(n: int) -> bool: if n <= 0: return False while n % 3 == 0: n //= 3 return n == 1 ``` ## [50. Pow(x, n)](https://leetcode.com/problems/powx-n/) ### 题目描述 计算 x 的 n 次方。 ### 输入输出样例 输入一个浮点数表示 x 和一个整数表示 n,输出一个浮点数表示次方结果。 ``` Input: x = 2.00000, n = 10 Output: 1024.00000 ``` ### 题解 利用递归,我们可以较为轻松地解决本题。注意边界条件的处理。 ```py def myPow(x: float, n: int) -> float: if n == 0: return 1 if x == 0: return 0 if n < 0: return 1 / myPow(x, -n) if n % 2 != 0: return x * myPow(x, n - 1) myPowSqrt = myPow(x, n >> 1) return myPowSqrt * myPowSqrt ```
嘉心糖糖
2025年3月11日 19:21
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码