演算法準備 4 17

2021-10-05 04:12:36 字數 1480 閱讀 9794

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

思路:動態規劃

動態規劃的核心將問題分解成小問題後,在計算規模較大的問題時,能夠用到規模較小的問題的解;

我們建立乙個整型陣列res,res[i]表示的是n=i時的結果,計算第i+1時無非是比較當前的res[i+1]與減去平方數的res[i+1-k^2]+1中的最小值

題解:

class

solution

}int sqrt_index_value=i;

//最大平方數的底

for(

int k=

1;k<=n;

++k)

}return res[n];}

public

intmin

(int a,

int b)

return a;

}}

描述:輸入乙個整數 n ,求1~n這n個整數的十進位制表示中1出現的次數。

例如,輸入12,1~12這些整數中包含1 的數字有1、10、11和12,1一共出現了5次。

未解思路:暴力解法:從1-n的數,全部逐個計算,對10取餘,完事兒除以10,餘數等於1,則計算結果的整型變數加一

題解1:

class

solution

k=k/10;

}}return res;

}}

前幾個用例並未出錯,最後用例超出時間限制。

正確思路:將n分解成最高位high和剩下的數字last,如n=1234,high=1,pow=1000,last=234,1-999的1的個數為f(pow-1),1000-1234的1的個數為last(千分位的個數)+f(last);若high不等於1,結果等於pow+high*f(pow-1)+f(last);

題解2:

class

solution

public

intf

(int n)

string s=string.

valueof

(n);

int high=s.

charat(0

)-'0';

int pow=

(int

)math.

pow(

10,s.

length()

-1);

int last=n-high*pow;

if(high==1)

return

f(pow-1)

+last+

f(last)+1

;else

return high*

f(pow-1)

+pow+

f(last);}

}

這個主要就是找數學上的乙個規律,與演算法無關

演算法準備 4 26

描述 從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2 10為數字本身,a為1,j為11,q為12,k為13,而大 小王為 0 可以看成任意數字。a 不能視為 14。思路 這題主要考察的是建模能力。我的思路是這樣的,只要排除0以外的最大值與最小值之差小於5且除0以外陣列中不存在...

演算法準備 5 29

描述 你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你 不觸動警報裝置的情況下 一夜之內能夠偷竊到的最高金額。思路...

演算法準備 6 1

描述 有 n 個花園,按從 1 到 n 標記。在每個花園中,你打算種下四種花之一。paths i x,y 描述了花園 x 到花園 y 的雙向路徑。另外,沒有花園有 3 條以上的路徑可以進入或者離開。你需要為每個花園選擇一種花,使得通過路徑相連的任何兩個花園中的花的種類互不相同。以陣列形式返回選擇的方...