題目連結(jié):
題目意譯:
有一份程式原本應(yīng)當(dāng)輸出一個(gè)整數(shù)陣列。但是該程式忘記輸出空白字元而該陣列是以數(shù)字字串 s 之形式輸出,而我們只知道陣列中的整數(shù)位於範(fàn)圍 [1, k] 之中並且該陣列沒有前導(dǎo)零。
給定一個(gè)字串 s 以及一整數(shù) k,回傳根據(jù)上述程式之性質(zhì)會(huì)輸出字串 s 的可能陣列之總數(shù)。由於答案可能很大,因此將其模 10 ^ 9 + 7 後再回傳。
限制:
1 ≦ s.length ≦ 10 ^ 5
s 只由數(shù)字組成並且不包含前導(dǎo)零。
1 ≦ k ≦ 10 ^ 9
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: s = "1000", k = 10000
輸出: 1
解釋: 唯一可能的陣列為 [1000]
範(fàn)例 2:
輸入: s = "1000", k = 10
輸出: 0
解釋: 不存在任何陣列可以輸出成 s 並同時(shí)滿足其中的數(shù)字皆 ≧ 1 以及 ≦ 10。
範(fàn)例 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]
解題思維:
其實(shí)跟
這題相當(dāng)?shù)仡愃疲绢}的遞迴式又更精簡(jiǎn)。
定義一個(gè)陣列 D,其中 D[i] 代表著有多少陣列將會(huì)輸出成由 s 前 i 個(gè)字元組成的子字串(即 S[0] ~ S[i - 1];如果 i == 0,則該子字串為一空字串)。可以看到遞迴式為:
D[0] = 1、
D[i] = 「所有 D[j] 之總和」,其中 i > 0 且索引值 j 滿足 s[j] ~ s[i - 1] 所形成數(shù)字 ≧ 1 且 ≤ k。
而所求即為 D[s.length]。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。