剑指offer-题34:丑数

该博客主要讨论如何找出第N个丑数,即只包含因子2、3和5的正整数。博主介绍了问题背景,并提供了使用Java和Python两种语言的解决方案。
摘要由CSDN通过智能技术生成

题目描述

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

实验平台:牛客网


解决思路:

这里写图片描述
这里写图片描述

java:

public class Solution {
    public int GetUglyNumber_Solution(int index) {
        if (index <= 0) {
            return 0;
        } else {
            int[] uglyNumarray = new int[index];
            uglyNumarray[0] = 1;
            int uglyNumIndex = 1;
            int multiply2Index = 0;
            int multiply3Index = 0;
            int multiply5Index = 0;

            while (uglyNumIndex < index) {
                int min = min(uglyNumarray[multiply2Index] * 2, uglyNumarray[multiply3Index] * 3, uglyNumarray[multiply5Index] * 5);
                uglyNumarray[uglyNumIndex] = min;

                while (uglyNumarray[multiply2Index] * 2 <= uglyNumarray[uglyNumIndex]) {
                    multiply2Index++;
                }
                while (uglyNumarray[multiply3Index] * 3 <= uglyNumarray[uglyNumIndex]) {
                    multiply3Index++;
                }
                while (uglyNumarray[multiply5Index] * 5 <= uglyNumarray[uglyNumIndex]) {
                    multiply5Index++;
                }
                uglyNumIndex++;
            }
            return uglyNumarray[uglyNumIndex - 1];
        }
    }

    public int min(int a, int b, int c) {
        int min = a < b ? a : b;
        min = min < c ? min : c;
        return min;
    }
}

python:

class Solution:
    def GetUglyNumber_Solution(self, index):
        # write code here
        if index <= 0:
            return 0
        else:
            ugly_num_list = [1]
            ugly_num_index = 1
            multiply2index = 0
            multiply3index = 0
            multiply5index = 0
            while ugly_num_index < index:
                min = self.min(ugly_num_list[multiply2index] * 2, ugly_num_list[multiply3index] * 3, ugly_num_list[multiply5index] * 5)
                ugly_num_list.append(min)
                while ugly_num_list[multiply2index] * 2 <= ugly_num_list[ugly_num_index]:
                    multiply2index += 1
                while ugly_num_list[multiply3index] * 3 <= ugly_num_list[ugly_num_index]:
                    multiply3index += 1
                while ugly_num_list[multiply5index] * 5 <= ugly_num_list[ugly_num_index]:
                    multiply5index += 1
                ugly_num_index += 1
            return ugly_num_list[ugly_num_index - 1]

    def min(self, a, b, c):
        min = (a if a < b else b)
        return min if min < c else c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值