leetcode--Ugly Number II

来源:互联网 发布:淘宝怎样上传宝贝视频 编辑:程序博客网 时间:2024/06/05 20:11

题目: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.

One:利用2、3、5之间的乘积值的大小比较。

public class Solution {    public int nthUglyNumber(int n) {        int[] uglyNumbers = new int[n];        uglyNumbers[0] = 1;        int index2 = 0;        int index3 = 0;        int index5 = 0;        int counter = 1;                while(counter < n){            int min = minOfThree(uglyNumbers[index2]*2,uglyNumbers[index3]*3,uglyNumbers[index5]*5);            if(min == uglyNumbers[index2]*2){                index2++;            }            if(min == uglyNumbers[index3]*3){                index3++;            }            if(min == uglyNumbers[index5]*5){                index5++;            }            uglyNumbers[counter] = min;            counter++;        }        return uglyNumbers[n-1];    }    private int minOfThree(int x,int y,int z){        return Math.min(z,Math.min(x,y));    }}

Two:进一步简化

public class Solution {    public int nthUglyNumber(int n) {        int[] uglyNumbers = new int[n];        uglyNumbers[0] = 1;        int index2 = 0;        int index3 = 0;        int index5 = 0;        int counter = 1;                while(counter < n){            int min = Math.min(uglyNumbers[index5]*5,Math.min(uglyNumbers[index2]*2,uglyNumbers[index3]*3));            if(min == uglyNumbers[index2]*2)index2++;            if(min == uglyNumbers[index3]*3)index3++;            if(min == uglyNumbers[index5]*5)index5++;            uglyNumbers[counter] = min;            counter++;        }        return uglyNumbers[n-1];    }}

Three:利用坐标来操作

public class Solution {    public int nthUglyNumber(int n) {        int[] uglyNumbers = new int[n];        uglyNumbers[0] = 1;        int index2 = 0;        int index3 = 0;        int index5 = 0;        int p = 1;                while(p < n){            uglyNumbers[p] = Math.min(uglyNumbers[index5]*5,Math.min(uglyNumbers[index2]*2,uglyNumbers[index3]*3));            if(uglyNumbers[p] >= uglyNumbers[index2]*2)index2++;            if(uglyNumbers[p] >= uglyNumbers[index3]*3)index3++;            if(uglyNumbers[p] >= uglyNumbers[index5]*5)index5++;            p++;        }        return uglyNumbers[n-1];    }}


0 0
原创粉丝点击