leetcode-279-完全平方数*

件名の説明:

 

 方法の一つ:動的計画

:タイムアウト

クラスのソリューション:
     DEF numSquares(自己、N:整数) - > int型:
        DP = [フロート(" INF ")] *(N + 1 
        DP [0] = 0
         のため、I 範囲(1、N + 1 のための J の範囲(1、INT(I ** 0.5)+ 1 ):
                DP [I] =分(DP [I]、DP [I - jは*のJ] + 1 戻り DP [N]

2:

クラスのソリューション:
    _dp = [0]
     DEF numSquares(自己、N):
        DP = self._dp
         一方 LEN(DP)<= N:
            DP + =分(DP [-i * I] のための I における + 1の範囲(1、INT(LEN(DP)** 0.5 + 1))) 戻り [n]はDP

方法II; BFS

クラスソリューション:
     DEF numSquares(自己、N:整数) - > INT:
         からコレクションインポート両端キューの
         場合のn == 1 又は N == 0:リターンN
         であれば、N ** 0.5%1 == 0:リターン 1 
        condidates =組(私は* ため、I 範囲(1、INT(N ** 0.5)+1 )) = 両端キュー([N])
        ステップ = 0
         中のキュー:
            ステップ + = 1 
            、L = LEN(キュー)
             のための _ 範囲(L):
                CUR = queue.pop()
                 のために X condidates。
                    TMP = CUR - X
                     なら TMP condidates:
                         戻りステップ+ 1
                     であれば TMP> 0:
                        queue.appendleft(TMP)
        

方法3:ラグランジュ4つの平方数と定理

クラスソリューション:
     DEF numSquares(自己、N:整数) - > INT:
         ながら N%4 == 0:
            N / = 4
         であれば、n個の8%== 7 リターン 4
        = 0
         一方 ** 2 <= N:
            B = INT((N - ** 2)** 0.5 であれば ** 2 + B ** 2 == N:
                 戻り BOOL(A)+ BOOL(B)+ = 1
        
        復帰 3

 

おすすめ

転載: www.cnblogs.com/oldby/p/11743139.html