日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[LeetCode]Perfect Squares

發(fā)布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LeetCode]Perfect Squares 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:Perfect Squares

題目內(nèi)容:

Given a positive integer?n, find the least number of perfect square numbers (for example,?1, 4, 9, 16, ...) which sum to?n.

For example, given?n?=?12, return?3?because?12 = 4 + 4 + 4; given?n?=?13, return?2?because?13 = 4 + 9.


題目解法:

最初看到這個題,我想到的是回溯法,剪了半天的枝還是各種超時,后來參考了xudli的解法,才知道這道題用動態(tài)規(guī)劃更合適。

我們設(shè)d[i]=a表示數(shù)字i對應(yīng)的least number of perfect square numbers為a,則顯然d[1]=1為初始條件,接著我們用背包問題的思想,對于i從2到n,嘗試向其中放入perfect square number j,j從1開始枚舉,每次放入后得到的結(jié)果為d[i - j*j]+1,也就是在不放入j的least number基礎(chǔ)上+1得到d[i]的最小值,對于不同的j,我們應(yīng)該選取其中最小的那個,也就是說:d[i] = min{d[i-j*j],j=1,2,3...,j*j<=i}。

最后,d[n]就是結(jié)果。

代碼如下:

class Solution { public:int getMin(int a, int b){return a < b ? a : b;}int numSquares(int n) {int *d = new int[n+1];d[1] = 1; // d[i]表示數(shù)字i的Prefect Seuares值。for(int i = 2; i <= n; i++){int j = 1;int min = 99999999;while(j*j <= i){if(j*j == i){min = 1;break;}min = getMin(min,d[i-j*j] + 1);j++;}d[i] = min;}return d[n];} };

轉(zhuǎn)載于:https://www.cnblogs.com/aiwz/p/6154018.html

總結(jié)

以上是生活随笔為你收集整理的[LeetCode]Perfect Squares的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。