LeetCode#279. Perfect Squares
阿新 • • 發佈:2019-01-03
題意:給定一個數n,求最少能有多少個完全平方數,使得這些完全平方數的之和等於n
思路:任意一個數x,都能表示為 x = a + b*b(即使x本身就是個完全平方數),因此求解x的最少完全平方數縮小為求解a的最少完全平方數,即求“最優子結構”,典型的動態規劃思想
難度:Medium
程式碼:
public int numSquares(int n) { //int count = (int)Math.sqrt(n); int[] result = new int[n+1]; Arrays.fill(result,Integer.MAX_VALUE); for(int i = 0; i*i <= n; i++) result[i*i] = 1; for(int i = 1; i <= n; i++){ for(int j = 1; j*j <= i; j++){ result[i] = Math.min(result[i],result[i-j*j]+1); } } return result[n]; }