Leetcode之super ugly number
来源:互联网 发布:顾家北和慎小嶷 知乎 编辑:程序博客网 时间:2024/06/05 17:03
和ugly number II的思路很类似,要使得super ugly number 不漏掉,那么用每个因子去乘第一个,当前因子乘积是最小后,乘以下一个…..以此类推。
python令人难以接受的代码实现:
class Solution(object): def nthSuperUglyNumber(self, n, primes): """ :type n: int :type primes: List[int] :rtype: int """ if n == 1: return 1 if primes == None or len(primes) == 0: return n length = len(primes) index = [1] * length dp = [1] * (n + 1) dp[1] = 1 factor = copy.deepcopy(primes) for i in range(2, n + 1): factor_index = self.getIndexOfMin(factor) dp[i] = factor[factor_index] self.handleEqualFactors(factor_index, dp[i], factor, index, dp, primes) index[factor_index] += 1 factor[factor_index] = primes[factor_index] * dp[index[factor_index]] return dp[n] def handleEqualFactors(self, factor_index, value, factor, index, dp, primes): length = len(factor) for i in range(factor_index + 1, length): if factor[i] == value: index[i] += 1 factor[i] = primes[i] * dp[index[i]] def getIndexOfMin(self, factor): length = len(factor) index = 0 cur_min = factor[0] for i in range(1, length): if factor[i] < cur_min: cur_min = factor[i] index = i return index
python heapq实现:(http://blog.csdn.net/xyqzki/article/details/50379007)
import heapqclass Solution(object): def nthSuperUglyNumber(self, n, primes): """ :type n: int :type primes: List[int] :rtype: int """ length = len(primes) idx = [0] * length ans = [1] minlist = [(primes[i]*ans[idx[i]], i) for i in xrange(len(idx))] #[(val, idx),(),...],这里把val和idx算作tuple算进去。 heapq.heapify(minlist) while len(ans) < n: (umin, min_idx) = heapq.heappop(minlist) idx[min_idx] += 1 if umin != ans[-1]: ans.append(umin) heapq.heappush(minlist, (primes[min_idx]*ans[idx[min_idx]], min_idx)) return ans[-1]
// http://www.hrwhisper.me/leetcode-super-ugly-number/public class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] ugly_number = new int[n]; ugly_number[0] = 1; PriorityQueue<Node> q = new PriorityQueue<Node>(); for (int i = 0; i < primes.length; i++) q.add(new Node(0, primes[i], primes[i])); for (int i = 1; i < n; i++) { Node cur = q.peek(); ugly_number[i] = cur.val; do { cur = q.poll(); cur.val = ugly_number[++cur.index] * cur.prime; q.add(cur); } while (!q.isEmpty() && q.peek().val == ugly_number[i]); } return ugly_number[n - 1]; }}class Node implements Comparable<Node> { int index; int val; int prime; Node(int index, int val, int prime) { this.val = val; this.index = index; this.prime = prime; } public int compareTo(Node x) { return this.val > x.val ? 1 : -1; }}
0 0
- Leetcode之super ugly number
- leetcode之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 、Super Ugly Number
- leetcode 313 : Super Ugly Number
- [LeetCode 313] Super Ugly Number
- 基于用户的协同过滤算法
- 解决GitHub Pages屏蔽百度爬虫的方法
- ReactiveCocoa框架菜鸟入门——信号(Signal)详解 第五课:适合给新手看的RAC用法总结
- (p143)11.1-4大数组直接寻址
- JavaSE程序分析002 try-catch-finally与return的小事情
- Leetcode之super ugly number
- viewpageindicator +fragment 在网络访问中与volley框架 null问题
- @RequestParam 和@RequestBody的使用方式
- 三维旋转矩阵推导
- 省选算法汇集(持续更新)最后更新2016.2.29
- 软件测试面试 (一) 如何测试一个杯子
- hibernate-validator的使用说明
- BZOJ1195 HNOI2006 最短母串
- 【Python学习笔记】一个很酷的尾递归优化