クラスソリューション{ プライベート INT [] W。 プライベート int型のDP []; 公共 INT numSquares(int型N){ W = 新しい INT [(INT)(Math.sqrt(N)+1 )]。 DP = 新しい INT [N + 1 ]。 以下のために(int型 ;)I <= Math.sqrt(N; I = 1 ++ I){ [i]は、W = I *はIであり; } 以下のために(int型 I = 1; I <w.length; ++ I){ ため(INT J = W [i]は、J <= N; ++ J){ 場合(jは== W [i])と{ DP [J] = 1 。 } 他{ 場合(DP [JW [I]]!= 0 ){ 場合(DP [J] == 0 ){ DP [j]は DPを= [JW [I] + 1 。 } 他{ DP [J] = Math.min(DP [J]、DP [JW [I] + 1 )。 } } } } } 戻り[n]はDP; } }