算法
文章平均质量分 64
纵横千里,捭阖四方
弱小,是最大的罪过;没有行动,梦想终究是想一想
展开
-
疫情之后,算法会在面试中怎么考
新冠终于和冬天一样慢慢走了,各行各业也逐步迎来了新生。很多人苟了一年之后,有的人希望升职加薪,还有很多人是“毕业”之后终于能出来面试找机会了。不管哪一种,有个问题必须要再次审视了——算法面试!如果想去好点的公司或者高薪的岗位,现场算法几乎是绕不开的问题。很多人平时感觉自己还挺聪明的,一到算法就智商归零, 该咋办呢?原创 2023-02-09 07:34:05 · 2724 阅读 · 1 评论 -
盘点面试常见的设计类算法问题
设计问题也是一种很重要的考察类型,特征是整体难度不大,但是要求结构合理、复用性好、考虑周全,代码规范等等。有些面试官不喜欢烧脑的动态规划等问题,就喜欢设计题,笔者曾经在面试微博和猿辅导都遇到过类似的问题。这些题目中最重要的是LRU设计,我们前面应重点讲解。LeetCode里还有大量的设计类型的问题,这些题目整体来说难度都不大,但是要完整写完要花费很多篇幅,感兴趣的同学可以看这里加强练习。本文我们盘点几道典型的设计问题。原创 2022-11-24 22:29:01 · 640 阅读 · 0 评论 -
盘点面试中常见的超大规模数据场景算法问题
在大部分算法题目中,默认给定的数据量都很小的,例如只有几个或者十几个元素,但是如果将数据量提高到百万甚至十几亿,那处理逻辑就会发生很大差异,这也是算法考查中,经常出现的一类问题。此时普通的数组、链表、Hash、树等等结构有无效了 ,因为内存空间放不下了。而常规的递归、排序,回溯、贪心和动态规划等思想也无效了,因为执行都会超时,必须另外想办法。这类问题该如何下手呢?这里介绍三种非常典型的思路:1.使用位存储,使用位存储最大的好处是占用的空间是简单存整数的1/8。原创 2022-11-12 13:03:24 · 1060 阅读 · 0 评论 -
海量数据场景下的算法问题:透彻理解从40个亿中产生一个不存在的整数
在大部分算法中,默认给定的数据量都很小的,例如只有几个或者十几个元素,但是如果将数据量提高到百万甚至十几亿,那处理逻辑就会发生很大差异,这也是算法考查中,经常出现的一类问题。此时普通的数组、链表、Hash、树等等结构有无效了 ,而常规的递归、排序,回溯、贪心和动态规划等思想也无效了,必须另外想办法。这类问题该如何下手呢?位运算以及相关拓展用法可以解决一部分场景的问题,本文就分析一个最热门的问题之一:从40个亿中产生一个不存在的整数。原创 2022-11-11 09:01:23 · 392 阅读 · 0 评论 -
爆肝一周——PYTHON 算法基础
我们之前声明了 Python 是一种面向对象的编程语言,到目前为止我们已经用了很多内置的类来说明数据和控制的构成。但是,面向对象的编程语言一个最重要的特征是允许编程者(解决问题的人)来创造一个可以用来解决问题的数据模型的新的类。记住我们运用抽象的数据类型来提供一个关于某种数据项目是什么样子(它的阐述)和它能做什么(它的方法)逻辑描述。通过建立类来实现一种抽象数据类型,一个编程者可以从中获得抽象过程的好处同时也提供必须的细节来将这些抽象实际运用到一个程序中。原创 2022-10-15 23:57:35 · 723 阅读 · 0 评论 -
C/C++ 算法基础
我们以简单程序Hello World为例说明程序的基本框架。此程序在屏幕上输出一行“Hello World!}这段程序包括二个部分:1.#include #include是C语言的保留字,表示要把另一个文件中的内容包含在本文件中。是被包含的文件的文件名。C语言中提供了一些可以被直接拿来使用、能够完成某些特定功能的库函数,分别声明于不同的头文件中。例如:stdio.h中定义了一些与输入输出有关的函数。原创 2022-10-07 16:39:06 · 9241 阅读 · 2 评论 -
终于搞懂什么是动态规划的
本图通过若干例子详细介绍了动态规划到底是什么,重复子问题、记忆化搜索、状态、状态转移方程,到底是啥意思原创 2022-06-30 22:12:30 · 361 阅读 · 2 评论 -
马上面试,算法怎么抱佛脚
我一直都反对要面试了才想起来要准备算法,临时抱佛脚很难有理想的效果。但是这又是很多人不得不面对的问题,那只有几天的情况下该怎么准备算法呢?我上一篇文章将算法常见问题整理了一个相对完整的体系结构。然而要掌握整个体系没有几个月搞不定。如果只有几天的话, 我们只能将最重要、最频繁、不是很难的问题先搞清楚,面试能否过就全靠运气了。下面我整理了几条脉络,你可以一条条的练习:1.一维数组 写个在有序数组中插入和删除元素的方法,操作数组的最前、最后和中间位置的元素都能通过,这两个方法就是用来热身的,同时感受.原创 2022-02-09 15:45:51 · 679 阅读 · 0 评论 -
没有吹牛,真的是全网独家-算法的体系结构
今天 不写具体的内容,而是发一张一直想画的图,算法到底有哪些基本的东西,相互关系又是什么呢?算法学习要循序渐进,那到底怎么个循序渐进呢?一图搞定。这是我肝了好几天画出来的,绝对值得收藏!...原创 2022-01-26 22:10:52 · 489 阅读 · 0 评论 -
贪心热门问题10:最大数
LeetCode179 最大数问题。给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例1:输入:nums = [10,2]输出:"210"示例2:输入:nums = [3,30,34,5,9]输出:"9534330"这个题解法很简单,但是现在还没太想明白为什么。参考根据网上的说法,我们可以根据结果来决定a和b的排序关系。如果拼接好之后ab比ba要好,那么我们会认为a应原创 2022-01-23 11:39:51 · 959 阅读 · 0 评论 -
贪心热门问题9:合并区间
LeetCode56.以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].这个题与前面的区间问题一样,按照左边界还是原创 2022-01-23 11:04:55 · 119 阅读 · 0 评论 -
贪心热门问题8:划分字母区间
这个题第一次做会感觉特别难, 无从下手,或者想的很复杂,但其实特别特别简单的方法就能解决。LeetCode763 . 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefe原创 2022-01-23 10:55:07 · 116 阅读 · 0 评论 -
贪心热门问题7:无重叠区间
区间问题也是面试中经常遇到的情况,我们来看一下。LeetCode435,给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例2:输入: [ [1,2], [2,3] ]输出: 0解释: 你不需要移除任何区间原创 2022-01-23 10:22:21 · 764 阅读 · 0 评论 -
贪心热门问题6:分发糖果
继续看贪心热门题目:LeetCode135,要求如下:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。...原创 2022-01-23 09:26:52 · 386 阅读 · 0 评论 -
贪心热门问题5:加油站问题
LeetCode134:加油站问题也是贪心的热门问题之一。题目要求:在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。示例1输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2]输出: 3解释:从 3 号加油站(索引为...原创 2022-01-22 10:08:49 · 812 阅读 · 0 评论 -
贪心热门问题4:跳跃游戏
如果要说贪心考察哪个问题最多,这个跳跃游戏一定名列靠前。先看一下题目要求:给定一个非负整数数组nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。...原创 2022-01-22 09:17:17 · 190 阅读 · 0 评论 -
贪心热门问题3:柠檬水找零
这也是贪心的典型题目之一。LeetCode860,在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例原创 2022-01-20 23:21:59 · 142 阅读 · 0 评论 -
贪心热门问题2:K 次取反后最大化的数组和
我们说贪心算法很多解题思路是我们先 看出来了,然后只是用代码实现而已,这个题就很典型:LeetCode1005,K次取反后最大化的数组和,给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。示例1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,.原创 2022-01-20 23:06:11 · 511 阅读 · 0 评论 -
贪心1:从田忌赛马说起
我们知道算法有三座大山:回溯、贪心和动态规划。前面断断续续用了半个多月,将回溯的基本问题过了一遍。从前面的题目可以看到回溯就是递归的进一步拓展。在递归中,回归阶段由系统给我们做好,我们主要收割结果就行了。但是在回溯中,我们要自己负责一部分撤销工作。而所有的回溯问题几乎都是这个套路来的。而回溯类型的题目也有非常明确的特点,层次太深太灵活,暴力枚举做不到,但是可以局部枚举。所以局部枚举就是一个for循环,而层次问题就交给递归来做。因此不管是代码结构还是画出来的结构图,各个题目都非常类似。不同的是去重等一些问题的原创 2022-01-20 08:38:46 · 430 阅读 · 0 评论 -
递归与回溯14:排列问题,有重复元素的全排列
LeetCode47,与前面的不同是给定的数字序列可能有重复,请你返回全排列结果。例如:输入:nums = [1,1,2]输出: [[1,1,2], [1,2,1], [2,1,1]]为了方便去重一定要对元素经行排序,这样我们才方便通过相邻的节点来判断是否重复使用了。我以示例中的 [1,1,2]为例 (为了方便举例,已经排序)抽象为一棵树,去重过程如图:图中我们对同一树层,前一位(也就是nums[i-1])如果使用过,那么就进行去重。一般来说:组合问题和排列问题是在树形结构的叶.原创 2022-01-20 07:29:15 · 413 阅读 · 0 评论 -
递归与回溯13:排列问题,全排列
LeetCode给定一个 没有重复 数字的序列,返回其所有可能的全排列。例如:输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]排列问题是典型的小学生都会,但是难道众人的问题。如果自己写结果,很容易,但是如果要用计算机来做,就难多了。这个问题与前面组合等问题的一个区别是使用过的后面还要再用,例如1,在开始使用了,但是到了2 和3的时候仍然要再使用一次。这本质上是因为 [1,2] 和 [2,1] 从集合原创 2022-01-20 07:14:47 · 827 阅读 · 0 评论 -
递归与回溯12:电话号码问题
LeetCode17,电话号码组合问题,也是热度非常高的一个题目,给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]我们说回溯仍然会存在暴力枚举的情况,这个题就很典型,例如如果输入23,那么,2就有 a、b、c三种情况,3有d、e、f三种情况。所以组合一下就一共就有3原创 2022-01-19 23:57:49 · 246 阅读 · 0 评论 -
递归与回溯11:子集问题,递增子序列
先看题意:给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。例如:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]...原创 2022-01-19 08:34:08 · 797 阅读 · 0 评论 -
递归与回溯10:子集,有重复元素
这个题与前面的相比又加码了,如果给定的子集有重复元素该怎么办?先看题目要求:LeetCode90给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]这个问题的关键是怎么处理去重的问题,这里卡哥的解析挺好,我们直接节选了:抽象为树形结构,那么“使用过”在这个树形结构上是有两个原创 2022-01-19 08:25:06 · 306 阅读 · 0 评论 -
递归与回溯9:子集问题-求子集
前面看了组合问题和分割为的典型例子,还有子集问题和排列问题也是回溯的典型例子,我们继续看子集问题。LeetCode78,给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。例如:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]我们知道回溯就可以画成一种树状结构,子集、组合、分割问题都可以抽象为一棵树,有一些区别是组合问原创 2022-01-19 08:06:00 · 696 阅读 · 0 评论 -
递归与回溯9:分割问题,复原IP地址
这也是一个经典的回溯问题,更具体来说是一个分割问题。先看题意:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在原创 2022-01-19 07:50:24 · 2226 阅读 · 0 评论 -
递归与回溯8:分割问题-分割回文串
分割问题也是回溯要解决的典型问题之一,常见的题目有分割回文串和IP地址分割,以及很多字符串分割相关的问题。LeetCode131 分割回文串,给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。例如:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]字符串如何判断回文本身就是一个道算法题,但仅仅是解答本题的一部分,因为还有更大的问题:如何切割?如果暴力切割,是非原创 2022-01-18 08:41:10 · 260 阅读 · 0 评论 -
递归与回溯7:LeetCode40. 组合总和 II(不可重复)
本题与LeetCode39的区别就是这里candidates 中的每个元素在每个组合中只能使用 一次 。但是candidats数组里的元素是可以重复的。有点绕,我们看一下例子:示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]题目说candidates是一个数组,里面有两个1,因此输出的结果里可以出现{1,1}的情况。严格来说这里说candidates是一个集合,是不严..原创 2022-01-18 08:26:26 · 290 阅读 · 0 评论 -
递归与回溯6:LeetCode39组合总和(可重复使用)
LeetCode39和40题都是组合总和的问题,唯一的区别是元素是否可以重复使用。39题是可以重复的,而40题是不可以的。我们来看一下。LeetCode39题目要求:给你一个 无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是原创 2022-01-17 23:27:35 · 605 阅读 · 0 评论 -
全网最简洁的快速排序和寻找第K大元素
快速排序是很多人面试的梦魇,例如有个小伙伴去美图面试,技术面已经过了,到了算法环节,面试官直接这么出题:然后不出意外,不出所料,这位小伙伴直接走人了。这个题怎么的难吗?快速排序很多人都知道怎么回事,但是为什么写不出来具体实现,更不能针对这个题的要求做修改呢?网上能找到一堆的材料,说得非常复杂,写的时候可能会定义多个方法, 我估计大部分人看的欲望都没有。我们今天就给出一种最简洁的实现方法。1. 快速排序就是双指针+二叉树的前序遍历快速排序是将分治法运用到排序问题的典型例子,基本思想是:通过一个原创 2022-01-15 17:28:20 · 403 阅读 · 0 评论 -
你能写出满分的二分查找算法吗
二分查找是分治的经典案例。分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如二分搜索、排序算法(快速排序,归并排序)等等……任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较原创 2022-01-15 10:34:49 · 416 阅读 · 0 评论 -
递归与回溯5:剪枝优化
我们说过,回溯法虽然是暴力搜索,但也有时候可以有点剪枝优化一下的,主要就是去掉那些不必要的递归,从而提高执行效率。例如假如有五个男孩子都和一个女生说要厮守终生。她会和这五个人都先过一辈子再确定谁会真正做到吗?当然不会。而是会先思考一下,有一个可能导出勾勾搭搭,那她可以认为这个人只是一时兴起,剪掉!有一个可能太窝囊了,什么都不会,那她可以认为和他在一起会非常累,剪掉!有一个长得太对不起祖宗,可能会影响下一代,剪掉!最后就剩下两个,再进一步考虑!这就是剪枝!在上一篇回溯的题目中,我们得遍历过程是这样的:原创 2022-01-13 19:00:45 · 640 阅读 · 0 评论 -
递归与回溯4:一文彻底理解回溯
1.回溯大白话关于回溯,先用大白话说几个结论:1.回溯能干什么?主要解决那些暴力枚举也无法解决的问题。2.回溯与递归是什么关系?回溯是递归的纵横拓展,主要是递归(纵)+局部暴力枚举(横)。所以你可以从递归和暴力两个方面来拆解回溯问题。3.回溯的关键在于“回”上,也就是要撤销,为什么要撤销?因为回溯本质上仍然是枚举,你不喜欢她的前任,你要将她前任的所有东西都仍然,然后才愿意重新开始!4.回溯经常看到“剪枝”,什么是剪枝,为什么要剪枝?剪枝就是去掉那些不必要的递归,从而提高执原创 2022-01-13 17:49:39 · 5261 阅读 · 2 评论 -
递归与回溯3:递归的优化
1 如何优雅地说一万次“我爱你”咕泡曾经组织过一次线上小活动,看谁说更多的“我爱咕泡”,我当时写了这么一段代码:public class FibonacciTest { public static int count = 0; public static void main(String[] args) { Fibonacci(20); System.out.println("count:" + count); } public st原创 2022-01-09 11:16:32 · 267 阅读 · 0 评论 -
递归与回溯2:一文搞懂递归
递归,大部分人都知道怎么回事,但是代码就是写不出来,所谓”你讲的都对,但我就是不会“。递归的本质仍然是方法调用,不过是自己调用自己。系统给我们维护了不同调用之间的保存和返回等功能。这种例子在现实中也有很多的,例如有一个笑话:从前啊,有座山,山上有座庙,庙里有个老和尚和一个小和尚在讲故事,老和尚对小和尚说:从前啊,有座山,山上有座庙,庙里有个老和尚和一个小和尚在讲故事,老和尚对小和尚说:从前啊,有座山,山上有座庙,庙里有个老和尚和一个小和尚在讲故事,老和尚对小和尚说:·····如.原创 2022-01-09 11:09:05 · 499 阅读 · 0 评论 -
递归与回溯1:生成全部有效括号组合
从现在开始我们一起来梳理递归相关的问题。递归是高阶算法的核心,回溯、dp都是递归的拓展和延伸。废话少说,递归的问题一般我们不要急着看代码,因为看了也不懂,而应该先分析问题的本质,从小到大逐步归纳出特征,最后再写代码。而计算机调用的时候恰好是从大小到逐步递进的。先看一个CC150中的题目,实现一种算法,打印n对括号中的全部有效组合,即左右括号正确配对。示例:输入n=3,输出:((())), (()()), (())(), ()(()),()()()所以有3个。这个题如果用递归的话怎么做呢?原创 2021-12-31 22:24:21 · 3683 阅读 · 2 评论 -
数字与数学7:幂的问题
LeetCode231题,让你判断一个数是否为2的幂LeetCode326题,让你判断一个数是否为3的幂LeetCode342题,让你判断一个数是否为4的幂这几个题是一个模子里复制出来的,但是解法还是有很大区别的,我们看一下。1.判断是否为2的次幂常规的思路可能是i从1循环到根号n, i每次*2或者高级一点的写法<<1 左移1,这种常规的解题思路时间复杂度是O(logn),这个题有个经典的解法,直接判断(n & (n - 1)) == 0即可,为什么这样呢?看一下下面原创 2021-12-31 08:47:28 · 702 阅读 · 0 评论 -
数学与数字6:LeetCode268. 丢失的数字
算法学习的一个原则是”复杂问题简单做,简单问题深入做“,这是一道简单的问题,但是可以深入分析。我们参考宫水三叶等的文章,发现这个题竟然有5种做法。先看题意:给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。题目没有说数组是否为排序的,那我们就要原创 2021-12-31 08:25:29 · 184 阅读 · 0 评论 -
数字与数学5:丑数
LeetCode263和264是两道关于丑数的问题,一听名字挺邪乎。看一下要求:给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例1:输入:n = 6输出:true解释:6 = 2 × 3示例2:输入:n = 14输出:false解释:14 不是丑数,因为它包含了另外一个质因数 7 。LeetCode263是让你判断一个数是不是丑数,264是让你判断前n个丑数。原创 2021-12-31 08:10:47 · 3780 阅读 · 0 评论 -
数学与数字4:罗马数字与整数的相互转换
罗马数字与整数的转换也是LeetCode中学习频率非常高的问题。先看一下什么是罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII原创 2021-12-31 07:48:44 · 463 阅读 · 0 评论