《LeetCode筆記3》 完全平方數

2021-10-02 03:21:26 字數 1673 閱讀 5917

給定正整數 n,找到若干個完全平方數(比如1, 4, 9, 16, ...)使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。

示例:

輸入: n = 12

輸出: 3

解釋: 12 = 4 + 4 + 4.

輸入: n = 13

輸出: 2

解釋: 13 = 4 + 9.

遞迴的方法

f(n):

1.如果n是乙個完全平方數,則返回1;

2.如果n不是乙個完全平方數,讓n依次減去小於n的完全平方數->x,去計算和為x的最少完全平方和個數f(x);

3.f(n) = min(f(x))+1

問題:隨著n的上公升,時間複雜度會迅速增大,超出時間限制。

class solution:

# def numsquares(self, n: int) -> int:

# x = n**0.5

# if(x%1==0):

# return 1

# else:

# num = float("inf")

# x = int(x)

# while(x>0):

# a = 0

# a = a + self.numsquares(n-(x**2))

# a += 1

# if a佇列+bfs

1. 建立乙個佇列value儲存當前所有相加得到的值,建立乙個佇列儲存步數;

2.對於列首的值依次相加所有小於n的完全平方數,並對相加後的值x進行判斷:

a.x=n, 返回結果

b.xc.x>n, 停止本迴圈,換為佇列的下乙個值繼續該過程。

(遍歷時,一定要去重複,否則時間複雜度也會很高)

class solution:

def numsquares(self, n: int) -> int:

x = n**0.5

if(x%1==0):

return 1

else:

x = int(x)

step =

value =

used_value = [0]*n

i = 1

while(i<=x):

i += 1

j = 0

while(1):

for i in range(x+1):

a = value[0]+i**2

s = step[0]+1

if(a==n):

return s

elif(an):

break

i+=1

del value[0]

del step[0]

LeetCode 完全平方數

給定正整數 n,找到若干個完全平方數 比如 1,4,9,16,使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。給你乙個整數 n 返回和為 n 的完全平方數的 最少數量 完全平方數 是乙個整數,其值等於另乙個整數的平方 換句話說,其值等於乙個整數自乘的積。例如,1 4 9 和 16 都是完...

程式3 完全平方數

題目 乙個整數,它加上100後是乙個完全平方數,再加上168又是乙個完全平方數,請問該數是多少?程式分析 假設該數為 x。1 則 x 100 n2,x 100 168 m2 2 計算等式 m2 n2 m n m n 168 3 設定 m n i,m n j,i j 168,i 和 j 至少乙個是偶數...

Leetcode 279 完全平方數

給定正整數 n,找到若干個完全平方數 比如1,4,9,16,使得它們的和等於n。你需要讓組成和的完全平方數的個數最少。示例 1 輸入 n 12輸出 3解釋 12 4 4 4.示例 2 輸入 n 13輸出 2解釋 13 4 9.解題思路 比較容易想到的方法是bfs 廣度優先搜尋 如果知道四平方和的話就...