Swift-丑数

作者: FlyElephant | 来源:发表于2016-12-25 21:59 被阅读10次

题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数.
根据题目规则,只要能判断一个数是不是丑数,遍历即可得到结果,不过时间会比较慢:

<pre><code>`
func isUglyNumber(num:Int) -> Bool {
var number:Int = num
while number%2 == 0 {
number = number/2
}

while number%3 == 0 {
    number = number/3
}

while number%5 == 0 {
    number = number/5
}

return number == 1 ? true : false

} `</code></pre>

关于丑数的寻找有更高效的方式:
①数组中的首项为1,即第一个丑数为1

②设置三个变量idx2、idx3、idx5存储下标,初始值都为0

③找出数组uglyNumbers[idx2]2、uglyNumbers[idx3]3、uglyNumbers[idx5]*5的最小值,最小值即为下一个丑数,同时更新最小值对应的下标,如果多个数字同时为最小值,则它们的下标都要更新
<pre><code>`
func findUglyNumber(index:Int) -> Int {

    var indexMulti2:Int = 0
    var indexMulti3:Int = 0
    var indexMulti5:Int = 0
    var uglyNumbers:[Int] = [1]
    var count:Int = 1
    while count < index {
        let numberMulti2:Int = uglyNumbers[indexMulti2]*2
        let numberMulti3:Int = uglyNumbers[indexMulti3]*3
        let numberMulti5:Int = uglyNumbers[indexMulti5]*5
        let min:Int = findMinNumber(a: numberMulti2, b: numberMulti3, c: numberMulti5)
        if min == numberMulti2 {
            indexMulti2 += 1
        }
        
        if min == numberMulti3 {
            indexMulti3 += 1
        }
        
        if min == numberMulti5 {
            indexMulti5 += 1
        }
        uglyNumbers.append(min)
        count += 1
    }
    return uglyNumbers[count-1]
}

func findMinNumber(a:Int,b:Int,c:Int) -> Int {
    let result = a > b ? b : a
    return result > c ? c : result
}`</code></pre>

测试代码:
<pre><code>`

var result:Int = minSort.findUglyNumber(index: 1500)
print("FlyElephant-第1500个丑数---(result)")</code></pre> 最终输出: <pre><code>
FlyElephant-****第1500个丑数****---859963392`</code></pre>

相关文章

  • Swift-丑数

    题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子...

  • 263、丑数(E)

    判断一个正整数是否为一个丑数。丑数的定义是 1 为丑数,只包含 2、3、5的数就是丑数,比如 4,8,但是14 就...

  • golang实现剑指offer:动态规划题型

    丑数 LeetCode 面试题49:丑数 题目描述 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Nu...

  • 剑指offer学习笔记:5.3 时间效率与空间效率的平衡

    面试题34:丑数我们把只包含因子2,3,5的数称为丑数。求按从小到大排列的第1500个丑数。例如,6,8都是丑数,...

  • 每周 ARTS 第 11 期

    1. Algorithm 263. 丑数(简单) 描述: 编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数...

  • 丑数

    1.题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它...

  • 丑数

    丑数 设计一个算法,找出只含素因子2,3,5的第n小的数。 符合条件的数如:1, 2, 3, 4, 5, 6, 8...

  • 丑数

    问题描述:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含...

  • 丑数

    题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包...

  • 丑数

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7...

网友评论

    本文标题:Swift-丑数

    本文链接:https://www.haomeiwen.com/subject/oiudvttx.html