leetcode264. Ugly Number II

来源:互联网 发布:java编译和运行命令 编辑:程序博客网 时间:2024/05/11 21:30

264. 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.

解法一

三个序列,2的倍数,3的倍数,5的倍数,每次取最小的值。然后再乘对应的factor(2,3,5)。

public class Solution {    public int nthUglyNumber(int n) {        int[] ugly = new int[n];        ugly[0] = 1;        int index2 = 0, index3 = 0, index5 = 0;        int factor2 = 2, factor3 = 3, factor5 = 5;        for (int i = 1; i < n; i++) {            int min = Math.min(Math.min(factor2, factor3), factor5);            ugly[i] = min;            if (min == factor2) {                factor2 = 2 * ugly[++index2];            }            if (min == factor3) {                factor3 = 3 * ugly[++index3];            }            if (min == factor5) {                factor5 = 5 * ugly[++index5];            }        }        return ugly[n - 1];     }}

这里写图片描述

解法二

public class Solution {    public int nthUglyNumber(int n) {        if(n <= 0) return -1; // get rid of corner cases         if(n == 1) return 1; // base case        int t2 = 0, t3 = 0, t5 = 0; //pointers for 2, 3, 5        int[] k = new int[n];        k[0] = 1;        for(int i  = 1; i < n ; i ++)        {            k[i] = Math.min(k[t2] * 2, Math.min(k[t3] * 3,k[t5] * 5));            if(k[i] == k[t2] * 2) t2++;             if(k[i] == k[t3] * 3) t3++;            if(k[i] == k[t5] * 5) t5++;        }        return k[n-1];    }}

这里写图片描述

1 0
原创粉丝点击