剑指offer 34. 丑数

xiaoxiao2021-02-27  94

//题目:丑数,我们把只包含因子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,5 int 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; } }
转载请注明原文地址: https://www.6miu.com/read-14554.html

最新回复(0)