633. 平方数之和 Sum of Square Numbers

【题目描述】
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c。

【示例1】

输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5

【示例2】

输入: 3
输出: False

【思路1】
1、暴力枚举 从0-c,是否存在两个数的平方和=c
2、时间复杂度O(n^2)
3、空间复杂度O(1)
4、超出时间限制

代码实现:

func judgeSquareSum(_ c: Int) -> Bool {
    if c == 0 { return true }
    for i in 0..<c {
        for j in i..<c {
            if i*i + j*j == c {
                return true
            }
        }
    }
    return false
}

【思路2】
1、使用集合Set
2、判断set是否包含c-ii,如果包含返回true 否则把ii加到set里,直到遍历结束
3、时间复杂度O(n)
4、空间复杂度O(n)

代码实现:

func judgeSquareSum(_ c: Int) -> Bool {
    if c == 0 { return true }
    var set = Set<Int>()
    for i in 0...Int(sqrt(Double(c))) {
        set.insert(i*i)
        if set.contains(c-i*i) {
            return true
        }
    }
    return false
}

【思路3】
1、双指针
2、定义两个变量left=0 right=sqrt(c)
3、两个变量的平方和小于c,那么左指针+1
4、两个变量的平方和大于c,那么右指针-1,直到遍历结束
5、 时间复杂度O(n)
6、空间复杂度O(1)

代码实现:

func judgeSquareSum(_ c: Int) -> Bool {
    if c == 0 { return true }
    var j = Int.init(sqrt(Double(c)))
    var i = 0
    while i < j {
        if i*i + j*j < c {
            i+=1
        }
        if i*i + j*j > c {
            j-=1
        }
        if i*i + j*j == c {
            return true
        }
    }
    return false
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,386评论 0 13
  • 高级钳工应知鉴定题库(858题) ***单选题*** 1. 000003难易程度:较难知识范围:相关4 01答案:...
    开源时代阅读 11,263评论 1 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,803评论 1 32
  • 算法复杂度 时间复杂度 空间复杂度 什么是时间复杂度 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗...
    KODIE阅读 8,546评论 0 9
  • 找寻 找寻 一路风尘 朝圣的路上 手捧虔诚的心 转动的经筒 飘荡的经幡 化作细长的教鞭 春风化雨润桃李 三尺讲台论...
    时光清浅阿莲阅读 1,690评论 4 5