633. Sum of Square Numbers
Leetcode 问题: 633. Sum of Square Numbers
Categories:
题目
Given a non-negative integer c, decide whether there’re two integers
a
andb
such thata^2 + b^2 = c
判断一个非负整数是否为两个整数的平方和
答案
Golang
func judgeSquareSum(checkNumber int) bool {
// 最小检查数字
minCheckNumber := 0
// 最大检查数字,检查的数字开根号,为最大需要检查的数字
maxCheckNumber := int(math.Sqrt(float64(checkNumber)))
for minCheckNumber <= maxCheckNumber {
// 当检查的数字没有全部检查过
// 测试平方加总数字
checkSumSquareNumber := (minCheckNumber * minCheckNumber) + (maxCheckNumber * maxCheckNumber)
if checkSumSquareNumber < checkNumber {
// 假如「平方加总数字」小于「检查的数字」,数字过小,将数字放大,最小检查数字 ++
minCheckNumber++
} else if checkSumSquareNumber > checkNumber {
// 假如「平方加总数字」大于「检查的数字」,数字过大,将数字缩小,最大检查数字 --
maxCheckNumber--
} else {
// 假如「平方加总数字」等于「检查的数字」,找到了!
return true
}
}
// 迴圈跑完都没有找到
return false
}
完整程式码
package main
import (
"fmt"
"math"
)
type Question struct {
// 参数
Parameter
// 答案
Answer
}
// 参数
type Parameter struct {
checkNumber int
}
// 答案
type Answer struct {
result bool
}
func main() {
QuestionList := []Question{
{
Parameter{5},
Answer{true},
},
{
Parameter{6},
Answer{false},
},
{
Parameter{1},
Answer{true},
},
{
Parameter{2},
Answer{true},
},
{
Parameter{3},
Answer{false},
},
{
Parameter{4},
Answer{true},
},
{
Parameter{104976},
Answer{true},
},
}
fmt.Printf("------------------------Leetcode Problem 167------------------------\n")
for _, question := range QuestionList {
// _, p := Question.Answer, Question.Parameter
param := question.Parameter
fmt.Printf("【input】:%v 【output】:%v\n", param, judgeSquareSum(param.checkNumber))
}
}
func judgeSquareSum(checkNumber int) bool {
// 最小检查数字
minCheckNumber := 0
// 最大检查数字,检查的数字开根号,为最大需要检查的数字
maxCheckNumber := int(math.Sqrt(float64(checkNumber)))
for minCheckNumber <= maxCheckNumber {
// 当检查的数字没有全部检查过
// 测试平方加总数字
checkSumSquareNumber := (minCheckNumber * minCheckNumber) + (maxCheckNumber * maxCheckNumber)
if checkSumSquareNumber < checkNumber {
// 假如「平方加总数字」小于「检查的数字」,数字过小,将数字放大,最小检查数字 ++
minCheckNumber++
} else if checkSumSquareNumber > checkNumber {
// 假如「平方加总数字」大于「检查的数字」,数字过大,将数字缩小,最大检查数字 --
maxCheckNumber--
} else {
// 假如「平方加总数字」等于「检查的数字」,找到了!
return true
}
}
// 迴圈跑完都没有找到
return false
}