字串恢復陣列

2021-10-05 05:48:41 字數 1600 閱讀 3889

某個程式本來應該輸出乙個整數陣列。但是這個程式忘記輸出空格了以致輸出了乙個數字字串,我們所知道的資訊只有:陣列中所有整數都在 [1, k] 之間,且陣列中的數字都沒有前導 0 。給你字串 s 和整數 k 。可能會有多種不同的陣列恢復結果。

按照上述程式,請你返回所有可能輸出字串 s 的陣列方案數。

由於陣列方案數可能會很大,請你返回它對 10^9 + 7 取餘 後的結果。

示例 1:

輸入:s = 「1000」, k = 10000

輸出:1

解釋:唯一一種可能的陣列方案是 [1000]

示例 2:

輸入:s = 「1000」, k = 10

輸出:0

解釋:不存在任何陣列方案滿足所有整數都 >= 1 且 <= 10 同時輸出結果為 s 。

示例 3:

輸入:s = 「1317」, k = 2000

輸出:8

解釋:可行的陣列方案為 [1317],[131,7],[13,17],[1,317],[13,1,7],[1,31,7],[1,3,17],[1,3,1,7]

示例 4:

輸入:s = 「2020」, k = 30

輸出:1

解釋:唯一可能的陣列方案是 [20,20] 。 [2020] 不是可行的陣列方案,原因是 2020 > 30 。 [2,020] 也不是可行的陣列方案,因為 020 含有前導 0 。

解題思路:使用從後往前的動態規劃解決

從前往後的動態規劃也可以解決,不過考慮情況比較繁瑣.

舉例說明: 對於字串"1234567890",k為90,假設我們此時遍歷"6",首先考慮拆分為"6"和剩下"7890"的組合方式,再討論"67"和"890"的組合方式,以此類推…

因為在求解i位置時時大於i的位置是已經求過的,故可用dp陣列記錄後面已經求過的結果. 由於k的限制,字首(也就是上例中的"6",「67」…)一旦超過90就要跳出內層迴圈

最後dp[i]的值就是內層遍歷的累加值

class

solution

:def

numberofarrays

(self, s:

str, k:

int)

->

int:

dp =[0

for i in

range

(len

(s)+1)

] dp[-1

]=1for i in

range

(len

(s)-1,

-1,-

1):# 數字不可能以0開頭

if s[i]

=='0'

: dp[i]=0

continue

for j in

range

(i,len

(s)):if

int(s[i: j +1]

)> k:

break

dp[i]

=(dp[i]

+ dp[j +1]

)%(pow(10

,9)+

7)return dp[

0]

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...

無冗餘輸入字串 字串陣列 字串陣列

問題 輸入乙個數字n,接下來輸入n個字串,要求無冗餘地儲存字串 分析 參考到無冗餘地字串輸入 使用動態分配。本題還參考了這個鏈結的內容 1 include include int main char p int ns,i scanf d ns p char malloc sizeof char fo...

字串 字串陣列 字元陣列的區別

string a newstring 字串 string a newstring 5 字串陣列 char a newchar 5 字元陣列 string a newstring abc 字串 string a newstring 字串陣列的賦值 string a 字串陣列的初始化 char a ne...