首页
学习
活动
专区
圈层
工具
发布

第n个丑数

习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。...【思路】 首先想到的是肯定是暴力法,从1,2,3,…循环一直找到给定的第n个丑数,但是这种做法我记得在LeetCode是TLE的。那么有没有更elegant的方法呢?...以下思路来自《剑指offer》第34题。 既然一个个循环不可行,那么就生成第n个丑数呗。 由于丑数只包含因子2,3,5,那么我们一个丑数只乘2,3,5的话也可以得到丑数。...由于1是一个丑数,那么分别乘上2,3,5可以得2,3,5。显然,它们是丑数。但是注意4也是一个丑数,它可以由2 x 2得到。...所以丑数可以再乘以2,3,5得到下一个丑数,唯一要保证的是应该从小到大得到下一个丑数。所以要分别保留2,3,5的上一个丑数指针,下一个丑数则是三个指针所指的数值分别乘以对应的因子中的最小值。

1.3K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    删除链表的倒数第n个节点

    题目: 思路: 由于这是一个链表,所以我们一般只能获取到一个头结点,然而其他信息我们不确定。所以可以采用双指针的方法。...思路二,利用一个指针先走出目标数目,然后两个指针一起走,那么先走的指针走完时,第二个指针恰好会停在目标元素上。...OutPutLinkedList(result);     }     /**      * 方案2,用双指针,一个先走一定的步数,然后一起走,某一个先抵达就停止      *      * @param...n; i++) {             p2 = p2.next;         }         //当指针p2走完n步以后,让指针p2和p1同时向前走,直到p2走到最后一个节点,即p2->...next=NULL         // 整个过程p2和p1之间相隔n-1个节点         while (p2 !

    90920

    【动态规划】第 N 个泰波那契数

    做动态规划类题目一般会定义一个dp表。这个dp表一般为一维数组或者二维数组。然后把这个表给填满,其中的一个值就有可能是我们想要的结果。...状态表示就是dp表中的某一个值所表示的含义 状态表示是怎么来的呢?得到状态表示的途径无非有以下几种:①题目要求。②经验+题目要求。...题目中说:存在第0个数,那么第N个数就和dp数组中N下标的元素相对应。 所以本题的状态表示为:dp[i]表示第i个泰波那锲数 第二步:状态转移方程 dp[i]等于什么?这就是状态转移方程。...填写n位置时,必须保证n-1,n-2,n-3位置的数据已经获得。所以我们要从左向右进行填表。 -第五步: 返回值 题目要求什么我们就返回什么。一般都是返回dp【n】。...代码实现 class Solution { public: int tribonacci(int n) { if(n==0) return 0; if(n==1|

    38710

    第N个最大值最小值:LargeSmall

    我们来生成一组随机整数作为案例 输入 =RANDBETWEEN(1,100) 然后下拉到A1:A10 好了 我们复制→粘贴为值 以防它再次随机改变 这是我们的案例数据 在实际的应用中 我们除了求最大最小的那个值...还经常要求第N个,例如第2个,第3个最大最小值 例如 我们知道了第一名分数是99 我们想知道第二名分数是多少 以知道他们的差距有多大 我们用Large和Small来求最大值和最小值 这是一对相反数 成对记起来更容易...Large(数据范围,想要的第N个最大值) 在我们的例子中 如果要求第二个最大值 公式就应该写为 为了帮你们识别 我把第1个最大值81 和 第2个最大值76 标识出来了 可以预见 第一个最大值的结果和...继续作死一下 我们在第2个参数的位置输入其他值试试 0和负数都会报错 Small(数据范围,想要的第N个最小值) 其实说了Large函数之后 这个完全就是一样的啊 因为 第一个最大值就是最后一个最小值...最后一个最大值就是第一个最小值 第n个最小值就是倒数第n个最大值 第n个最大值就是倒数第n个最小值 这是一组绕口令 期末要考!

    99820

    LeetCode19 移除倒数第N个元素

    给定一个链表,要求移除导数第n个元素,并且返回新链表的head 样例: Given linked list: 1- >2->3->4->5, and _n_ = 2....但是上手去做的话会有一点小问题,因为如果是数组很好办,我们直接可以求到数组的长度,导数第N个元素也非常容易确定。...我们对这个链表遍历两次,第一次求到链表的长度,这样我们就可以推算到倒数第N个数是正数第几个数了。第二次我们移动对应的长度,找到需要删除的节点,将它移除即可。...我们可以先让一个运动员先跑30米,然后再派另外一个运动员从起点出发。这样,当第一个运动员跑到终点的时候,第二个运动员所在的位置就是距离终点30米的位置。...int) -> ListNode: pnt1 = head # 第一个指针先跑n步 for i in range(n):

    82410

    19 删除链表的倒数第N个节点

    01 题目信息 题目地址: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 给定一个链表,删除链表的倒数第 n...现在我们是完成了这样一个思路,但有个地方可以做一个调整,也是要养成的一个习惯。对于一个链表如下图: ? 它是按某种应用逻辑存储的内容,内容都会有操作有修改的时候,因此为了方便操作以及操作的安全性。...它就是我们处理链表的经典方式快慢指针,我们用两个指针,快指针领先n次(倒数次数),慢指针在起点,同时迭代。当快指针到了终点,那慢指针岂不是到了倒数第n个。...fast起点可以取后一格那么slow就能拿到倒数第n个的前一个节点 ?...i++; } // 直到fast遍历完,slow就停在倒数第n个的前个 slow.next = slow.next.next; return listHead.next;

    80830
    领券