题目描述

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

代码一

分析
判断丑数:
首先除2,直到不能整除为止,然后除5到不能整除为止,然后除3直到不能整除为止。最终判断剩余的数字是否为1,如果是1则为丑数,否则不是丑数。

找丑数:

image.png
丑数能够分解成2^x_3^y_5^z,
所以只需要把得到的丑数不断地乘以2、3、5之后并放入他们应该放置的位置即可

  1. public class Solution {
  2. public static void main(String[] args)
  3. {
  4. System.out.println(GetUglyNumber_Solution(0));
  5. }
  6. public static int GetUglyNumber_Solution(int index) {
  7. if(index<7)return index;
  8. int i=0,j=0,k=0;
  9. int[] arr = new int[index];
  10. arr[0] = 1;
  11. for(int m=1;m<index;m++)
  12. {
  13. arr[m] = Math.min(arr[i]*2, Math.min(arr[j]*3, arr[k]*5));
  14. //防止重复
  15. if(arr[i]*2==arr[m])i++;
  16. if(arr[j]*3==arr[m])j++;
  17. if(arr[k]*5==arr[m])k++;
  18. }
  19. return arr[index-1];
  20. }
  21. }