Description
牛客网 2018校招真题 寻找丑数
Solving Ideas
参考《剑指offer》丑数
Time complexity :
O
(
n
)
O(n)
O(n)
Space complexity :
O
(
n
)
O(n)
O(n)
Solution
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author wylu
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
System.out.println(getUglyNumber(n));
}
private static int getUglyNumber(int n) {
if (n < 1) return 0;
int[] arr = new int[n];
arr[0] = 1;
int t2 = 0, t3 = 0, t5 = 0;
for (int i = 1; i < n; i++) {
int m2 = arr[t2] * 2, m3 = arr[t3] * 3, m5 = arr[t5] * 5;
arr[i] = Math.min(Math.min(m2, m3), m5);
while (arr[t2] * 2 <= arr[i]) t2++;
while (arr[t3] * 3 <= arr[i]) t3++;
while (arr[t5] * 5 <= arr[i]) t5++;
}
return arr[n - 1];
}
}