前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 计数质数 - LeetCode

Swift 计数质数 - LeetCode

作者头像
韦弦zhy
发布2018-09-11 12:44:16
1.5K0
发布2018-09-11 12:44:16
举报
文章被收录于专栏:韦弦的偶尔分享

LeetCode.jpg

题目:计数质数
描述:统计所有小于非负整数 n 的质数的数量。

案例1:

代码语言:javascript
复制
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

质数的定义:质数

方案一:判断质数
代码一:
代码语言:javascript
复制
func countPrimes(_ n: Int) -> Int {
    if n < 3 {
        return 0
    }
    
    var count = 1
    //判断大于3的奇数
    for i in 3..<n where i % 2 != 0 {
        if isPrime(i) {
            print(i)
            count += 1
        }
    }
    return count
}

func isPrime(_ n: Int) -> Bool {
    //为了下面的for循环能正常进行,在这里加这个判断,只有3不满足下面循环条件
    if n == 3 {
        return true
    }
    //对N开根号
    for i in 2...Int(sqrt(Double(n))) {
        if n % i == 0 {
            return false
        }
    }
    return true
}
执行用时:4812ms、、、真是慢啊,要是上面条件直接是n或者n/2提交直接超时
方案二:筛法
代码二:
代码语言:javascript
复制
func countPrimes(_ n: Int) -> Int {
    if n < 3 {
        return 0
    }
    if n == 3 {
        return 1
    }
    var array = [Bool](repeating: true, count: n)
    
    for i in 2...Int(sqrt(Double(n))) {
        if i * i >= n { break }
        if !array[i] { continue }
        var j = i * i
        while j < n {
            array[j] = false
            j = j + i
        }
    }
    var count = 0
    for i  in 2..<n {
        if array[i] {
            count += 1
        }
    }
    return count
}

执行用时:420ms

用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:计数质数
    • 描述:统计所有小于非负整数 n 的质数的数量。
      • 方案一:判断质数
        • 代码一:
        • 执行用时:4812ms、、、真是慢啊,要是上面条件直接是n或者n/2提交直接超时
      • 方案二:筛法
        • 代码二:
        • 用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档