【劍指offer】面試題 49. 醜數
阿新 • • 發佈:2018-05-13
als pre ID offer get 素因子 ole bool 第一個
面試題 49. 醜數
題目描述
題目:把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含因子7。
習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。
解答過程
樣例
給出 num = 8,返回 true。
給出 num = 14,返回 false。
代碼實現
1.判斷一個數是否是醜數
public class Solution { /** * @param num: An integer * @return: true if num is an ugly number or false */ public boolean isUgly(int num) { // write your code here boolean b = false; if(num==1) return true; if(num<1) return false; while(num!=1){ if(num%2==0){ num=num/2; }else if(num%3==0){ num=num/3; }else if(num%5==0){ num=num/5; }else{ return false; } } return true; } }
2.設計一個算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
public class Solution { public int GetUglyNumber_Solution(int n) { if(n<=0) return 0; if(n==1) return 1; int[] nums = new int[n]; nums[0] = 1; int p2 = 0,p3 = 0,p5 = 0; for(int i=1;i<n;i++){ nums[i] = Math.min(nums[p2]*2,Math.min(nums[p3]*3,nums[p5]*5)); if(nums[i]==nums[p2]*2) p2++; if(nums[i]==nums[p3]*3) p3++; if(nums[i]==nums[p5]*5) p5++; } return nums[n-1]; } }
【劍指offer】面試題 49. 醜數