剑指offer 34. 丑数

来源:互联网 发布:数据统计分析基础 编辑:程序博客网 时间:2024/06/06 01:50
//题目:丑数,我们把只包含因子2,3,5的数称为偶数,按从下到大第1500个丑数。//解法1:逐个判段每个数是否是丑数public class Main {public static void main(String[] args) throws Exception {System.out.println(findUglyNumber(100));}public static int findUglyNumber(int n){int result = 1;int num = 2;while(result<n){if(isUgly(num)){result++;}num++;}return num-1;}public static boolean isUgly(int num){while(num % 2 == 0){num = num/2;}while(num % 3 == 0){num = num/3;}while(num % 5 == 0){num = num/5;}if(num == 1){return true;}else{return false;}}}//解法2:逐个计算下一个丑数的值,并将其保存在数组中,使用三个下标分别代表2,3,5的情况public class Main {public static void main(String[] args) throws Exception {System.out.println(findUglyNumber(1500));}public static int findUglyNumber(int n){if(n<=0){return 0;}int[] number = new int[n];int index = 0;number[index] = 1;index++;int index2 = 0;//使用三个index来标记2,3,5int index3 = 0;int index5 = 0;while(index<n){number[index] = getMin(number[index2]*2,number[index3]*3,number[index5]*5);while(number[index]>=number[index2]*2){//更新三个标签的值index2++;}while(number[index]>=number[index3]*3){index3++;}while(number[index]>=number[index5]*5){index5++;}index++;}return number[index-1];}public static int getMin(int num1, int num2, int num3){//取三个值中的最小值int result = num1;if(result>num2){result = num2;}if(result>num3){result = num3;}return result;}}

0 0