264. Ugly Number II
一、题目
1、审题
2、分析
输出第 n 个 ugly 数值。
二、解答
1、思路
①、新建一个大小为 n 的数组 arr,存放自小到大的 ugly 数,且 arr[0] = 1。
②、采用三个指针t2、t3、t5,代表 2、3、5的指向,起始分别指向数组下标 0;且 arr[i] = Math.min(arr[t2] * 2 , Math.min(arr[t3] * 3, arr[t5] * 5))。之后对应的最小 ugly 数的指针向右移动一位。
public int nthUglyNumber(int n) { if(n <= 0) return 0; int t2 = 0, t3 = 0, t5 = 0; int[] arr = new int[n]; arr[0] = 1; for (int i = 1; i < n; i++) { arr[i] = Math.min(arr[t2] * 2 , Math.min(arr[t3] * 3, arr[t5] * 5)); if(arr[i] == arr[t2] * 2) t2++; if(arr[i] == arr[t3] * 3) t3++; if(arr[i] == arr[t5] * 5) t5++; } return arr[n - 1]; }