633. Sum of Square Numbers

Leetcode 问题: 633. Sum of Square Numbers

题目

Given a non-negative integer c, decide whether there’re two integers a and b such that a^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
}

参考资料