leetcode - Ugly Number、Ugly Number II 、Super Ugly Number
来源:互联网 发布:js跨frame调用方法 编辑:程序博客网 时间:2024/04/29 18:05
leetcode题目汇集 — Ugly Number系列
首先看一下这几道题目要求
Ugly Number
Write a program to check whether a given number is an ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 6, 8
are ugly while 14
is not ugly since it includes another prime factor 7
.
Note that 1
is typically treated as an ugly number.
Ugly Number II
Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number.
Super Ugly Number
Write a program to find the nth super ugly number.
Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes
of size k
. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32]
is the sequence of the first 12 super ugly numbers given primes
= [2, 7, 13, 19]
of size 4.
Note:
(1) 1
is a super ugly number for any given primes
.
(2) The given numbers in primes
are in ascending order.
(3) 0 < k
≤ 100, 0 < n
≤ 106, 0 < primes[i]
< 1000.
按照质因数分解方法,依次除以质因数2,3,5,判断最后的结果是否为1.
代码:
public class Solution { public boolean isUgly(int num) { if (num <= 0) { return false; } while (num % 2 == 0) { num /= 2; } while (num % 3 == 0) { num /= 3; } while (num % 5 == 0) { num /= 5; } return num == 1 ? true : false; }}
第二道题 Ugly Number II在题目1的基础上求出第n个ugly number
最简单粗暴的方法就是依次遍历各整数,直到ugly number个数等于n的时候停止,这种方法比较复杂。
另一种方法就是提示部分的方法:维护三个计数器i2,i3,i5,分别指向uglys中通过乘以2,3,5得到结果的下标,并将本次uglys[i2]*2,uglys[i3]*3,uglys[i5]*5的最小值加入uglys,对应的计数器加1.
代码
public class Solution { public int nthUglyNumber(int n) { List<Integer> uglys = new LinkedList<Integer>(); uglys.add(1); int i2 = 0, i3 = 0, i5 = 0; while (uglys.size() < n) { int minValue = Math.min(uglys.get(i2) * 2, Math.min(uglys.get(i3) * 3, uglys.get(i5) * 5)); if (minValue == uglys.get(i2) * 2) { i2++; } if (minValue == uglys.get(i3) * 3) { i3++; } if (minValue == uglys.get(i5) * 5) { i5++; } uglys.add(minValue); } return uglys.get(n - 1); }}
第三道题 Super Ugly Number是Ugly Number ||的延伸,这里的ugly number其质因数只包含primes中的元素,其中1是特殊的ugly number
借鉴第二道题的思想,假设primes数组大小为k,则维护一个大小为k的计数器数组,方法与第二道题类似。
代码:
public class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int k = primes.length; int[] count = new int[k]; int[] temp = new int[k]; int[] nums = new int[n]; nums[0] = 1; for (int j = 1; j < n; j++) { for (int i = 0; i < k; i++) { temp[i] = nums[count[i]] * primes[i]; } int min = temp[0]; for (int i = 1; i < k; i++) { if (temp[i] < min) { min = temp[i]; } } for (int i = 0; i < k; i++) { if (temp[i] == min) { count[i]++; } } nums[j] = min; } return nums[n - 1]; }}
- leetcode - Ugly Number、Ugly Number II 、Super Ugly Number
- 【LeetCode从零单刷】Ugly Number I, II & Super Ugly Number
- leetcode Super Ugly Number
- Super Ugly Number | LeetCode
- leetcode Super Ugly Number
- leetcode Super Ugly Number
- Leetcode Super Ugly Number
- LeetCode Super Ugly Number
- leetcode - Super Ugly Number
- 【Leetcode】Super Ugly Number
- leetcode Super Ugly Number
- LeetCode Super Ugly Number
- LeetCode: Super Ugly Number
- Super Ugly Number -- leetcode
- leetcode---Super Ugly Number
- leetcode之Ugly Number && Ugly Number II
- Leetcode -- Ugly Number II
- LeetCode: Ugly Number II
- parawork平台介绍
- Hadoop第一个demo运行错误
- JRebel实现Idea热更新
- 实现LIstView图标在上文字在下
- 欢迎使用CSDN-markdown编辑器
- leetcode - Ugly Number、Ugly Number II 、Super Ugly Number
- activiti 动态表单+easyui 实现审核流程功能
- 《C和指针》阅读笔记-注释
- CVPR 2016-11-24
- 设置theme实现类似于自定义dialog效果
- 入口文件知识点
- C#设计模式-抽象工程模式(1)
- Unity3D 关于Facebook SDK接入方法(一)
- es6 fetch body格式