JAVA算法:求丑数—动态规划(Ugly Numbers)
丑数是唯一的因子是2、3或5的数字。
序列1,2,3,4,5,6,8,9,10,12,15,…显示前11个丑数。按照惯例,1包括在内。
给定一个数字n,你的任务就是找出第n个丑数。
实例:
输入:n=7
输出:8
输入:n=10
输出:12
输入:n=15
输出:24
输入:n=150
输出:5832
算法设计1:
遍历访问所有的正整数,直到丑数计数小于n(如果整数丑数小于增量丑数计数)。
要检查一个数字是否是丑数,用2、3和5的最大可除乘方除该数字,如果该数字变为1,则它是一个丑数,否则不是。
例如,让我们看看如何检查300是否为丑数。4可以被因子2(最大因子)除尽,将300除以4以后得到75。3可以被因子3(最大因子)除尽,将75除以3得到25。25可以被因子5(最大因子)除尽,所以25除以25得到1。因为我们最后得到1,所以300是一个丑数。
package com.bean.algorithm.basic;
public class UglyNumbers {
// Java program to find nth ugly number
/*
* This function divides a by greatest divisible power of b
*/
static int maxDivide(int a, int b) {
while (a % b == 0)
a = a / b;
return a;
}
/*
* Function to check if a number is ugly or not
*/
static int isUgly(int no) {
no = maxDivide(no, 2);
no = maxDivide(no, 3);
no &