JAVA算法:求丑数—动态规划

该博客介绍了如何使用动态规划求解丑数问题。丑数是指因子仅包含2、3、5的正整数。通过遍历和动态规划两种方法展示了如何找到第n个丑数,并给出了具体算法设计及伪代码示例。
摘要由CSDN通过智能技术生成

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 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值