面试题34:丑数

来源:互联网 发布:qq拼音打字软件 编辑:程序博客网 时间:2024/06/05 02:37
package com.abuge;public class GetUglyNum {//得到三个数的最小值public static int getMin(int num1, int num2, int num3){int min = (num1 > num2) ? num2 : num1;min = (min > num3) ? num3 : min;return min;}//得到指定个丑数public static int getUglyNum(int index){if(index <= 0){return 0;}int[] uglyNumbers = new int[index];//初始化uglyNumbers[0] = 1;int currentIndex = 1;int mutiplyt2Index = 0;int mutiplyt3Index = 0;int mutiplyt5Index = 0;while(currentIndex < index){int min = getMin(uglyNumbers[mutiplyt2Index] * 2, uglyNumbers[mutiplyt3Index] * 3, uglyNumbers[mutiplyt5Index] * 5);uglyNumbers[currentIndex] = min;//此时currentIndex指向当前最大的丑数,然后寻找到一个乘以2/3/5的使其刚好大于此时最大丑数的下一个丑数while(uglyNumbers[mutiplyt2Index] * 2 <= uglyNumbers[currentIndex]){mutiplyt2Index++;}while(uglyNumbers[mutiplyt3Index] * 3 <= uglyNumbers[currentIndex]){mutiplyt3Index++;}while(uglyNumbers[mutiplyt5Index] * 5 <= uglyNumbers[currentIndex]){mutiplyt5Index++;}currentIndex++;}return uglyNumbers[currentIndex - 1];}public static void main(String[] args){System.out.println(getUglyNum(1));System.out.println(getUglyNum(2));System.out.println(getUglyNum(3));System.out.println(getUglyNum(4));System.out.println(getUglyNum(5));System.out.println(getUglyNum(6));System.out.println(getUglyNum(1500));}}

0 0
原创粉丝点击