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

第n个丑数

【题目描述】 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。...求按从小到大的顺序的第N个丑数。 【思路】 首先想到的是肯定是暴力法,从1,2,3,…循环一直找到给定的第n个丑数,但是这种做法我记得在LeetCode是TLE的。...以下思路来自《剑指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的上一个丑数指针,下一个丑数则是三个指针所指的数值分别乘以对应的因子中的最小值。

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

    878.第 N 个神奇数字 每日一题 11-22

    原题 一个正整数如果能被 a 或 b 整除,那么它是神奇的。 给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 10^9 + 7 取模 后的值。...n <= 10^9 2 <= a, b <= 4 * 10^4 难度Hard 标签数学 二分查找 分析 看完题目我感觉一个线性遍历就能出来了,可是忘记了今天这是一道困难题。...于是乎我的第一个解法横空出世,默认的testCase也通过了。...超时了 哈哈哈 于是开始重新分析题目,发现规律: 一个数里包含的神奇数字(x)的数量= x/a + x/b - x/最小公倍数 代码实现 func nthMagicalNumber(n int,...minGongBeiShu(a, b) maxVal := 1000000000 + 7 cnt := 0 for start <= end { // 找到中间的数,计算出这个数 有几个神奇数字

    29720

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

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

    60720

    2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1

    2025-01-13:找出 K 秒后拿着球的孩子。用go语言,给定两个正整数 n 和 k,有 n 个编号从 0 到 n - 1 的孩子排成一队。 最开始,编号为 0 的孩子手中有一个球,并向右传递。...每秒,持球的孩子会将球传给旁边的孩子。 当球到达队列的任一端(即编号为 0 或 n - 1 的孩子)时,传球方向会反转。 请返回 k 秒后接到球的孩子的编号。 提示: 2 n <= 50。...大体步骤如下: 1.初始化孩子队列,编号为0到n-1。 2.设立一个变量t,用来记录球传递的位置。 3.计算每秒传递一次球后的位置: • 计算当前传球的位置t,取余数操作k % (n - 1)。...• 如果经过k/(n-1)轮传球之后发现传球方向需反转,条件是(k/(n-1)) % 2 > 0,那么返回队列的倒数第二个位置n - t - 1,因为最后一个位置是编号为n-1的孩子,其实到该孩子手中的时候...总的时间复杂度为O(1),因为无论n和k的取值如何,算法的执行时间不会随着n和k的增加而增加。 总的额外空间复杂度为O(1),因为除了几个变量外,没有使用额外的数据结构存储数据。

    19410

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

    01 题目信息 题目地址: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 给定一个链表,删除链表的倒数第 n...示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:给定的 n 保证是有效的。...通常都会在真正存储数据的链头之前加一个节点它的值和内容无关,用这个额外的节点来做真正的链表节点。 ?...它就是我们处理链表的经典方式快慢指针,我们用两个指针,快指针领先n次(倒数次数),慢指针在起点,同时迭代。当快指针到了终点,那慢指针岂不是到了倒数第n个。...fast起点可以取后一格那么slow就能拿到倒数第n个的前一个节点 ?

    46730

    第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个最小值 这是一组绕口令 期末要考!

    72520
    领券