leetcode 842 搜尋剪枝

2021-10-11 15:34:41 字數 1326 閱讀 5239

這個題還真挺簡單的,值得記錄的是這個題要求的數的範圍在int內,但python的int函式其實是可以超過int範圍的,所以咱們需要判斷一下在(1<<31)-1範圍內,另外,可以利用這一點,只搜尋長度10以內的子串,是乙個小的剪枝技巧。

第二個點也是乙個剪枝技巧,由於咱們需要先找到兩個數,如果第乙個數開頭是0,那就不用搜尋第二個數了。

**如下:

class

solution

:def

splitintofibonacci

(self, s:

str)

-> list[

int]

: mx =

int(

len(s)/3

)+1 int_max =(1

<<31)

-1# 給定前兩個數,遍歷並判斷

deffind

(l, i, s)

:while i <

len(s)

: ret =

str(

int(l[-1

])+int

(l[-2]

))if i+

len(ret)-1

<

len(s)

and s[i:i+

len(ret)

]== ret and

int(ret)

<= int_max:

i +=

len(ret)

else

:return

return l

# 窮盡搜尋可能的前兩個數

for i in

range(1

,min(10

, mx+1)

):first = s[

:i]if first[0]

=='0'

andlen

(first)

>1:

continue

for j in

range

(i+1

,min

(i+10

, i+mx+1)

):second = s[i:j]

if second[0]

=='0'

andlen

(second)

>1:

continue

ret = find(

[first, second]

, j, s)

if ret:

return ret

return

Leetcode 842 將陣列拆分成斐波那契序列

給定乙個數字字串 s,比如 s 123456579 我們可以將它分成斐波那契式的序列 123,456,579 形式上,斐波那契式序列是乙個非負整數列表 f,且滿足 0 f i 2 31 1,也就是說,每個整數都符合 32 位有符號整數型別 f.length 3 對於所有的0 i f.length 2...

搜尋(1) 剪枝

要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為ri,高度為hi的圓柱。當i m時,要求ri ri 1且hi hi 1。由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面 最下一層的下底面除外 的面積q最小。令q s 請程式設計對給出的n和...

剪枝搜尋心得

前天在 程式設計之美 中讀到乙個 一摞烙餅排序 的問題,第一眼不會做,看了答案之後倒是讓我明白了一年多之前不真正理解的剪枝搜尋的內涵。記錄一下,作為分享和溫習之地。void cprefixsorting search int pcakesarray,int step if issorted pcak...