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
}

參考資料