Swift-丑数

题目:把只包含因子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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 算法题:寻找丑数 这是一道在订阅的blog上看到的题目,觉得比较有意思,就动手做了一下。 何为丑数? 丑数(Ugl...
    David栗子阅读 752评论 0 0
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,578评论 0 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,162评论 19 139
  • 转载至:http://www.cnblogs.com/cvst/p/5822373.html Java Excep...
    小沙鹰168阅读 2,018评论 0 3
  • 新人心意忙,今日喜成双。婚宴满春色,堂前多酒香。快圆今日梦,不误此时光。乐在深情处,祝福爱永长。
    八斗才001阅读 225评论 2 2

友情链接更多精彩内容