前往
大廳
主題

LeetCode - 1416. Restore The Array 解題心得

Not In My Back Yard | 2024-03-04 12:00:11 | 巴幣 0 | 人氣 41

題目連結:


題目意譯:
有一份程式原本應當輸出一個整數陣列。但是該程式忘記輸出空白字元而該陣列是以數字字串 s 之形式輸出,而我們只知道陣列中的整數位於範圍 [1, k] 之中並且該陣列沒有前導零。

給定一個字串 s 以及一整數 k,回傳根據上述程式之性質會輸出字串 s 的可能陣列之總數。由於答案可能很大,因此將其模 10 ^ 9 + 7 後再回傳。

限制:
1 ≦ s.length ≦ 10 ^ 5
s 只由數字組成並且不包含前導零。
1 ≦ k ≦ 10 ^ 9



範例測資:
範例 1:
輸入: s = "1000", k = 10000
輸出: 1
解釋: 唯一可能的陣列為 [1000]

範例 2:
輸入: s = "1000", k = 10
輸出: 0
解釋: 不存在任何陣列可以輸出成 s 並同時滿足其中的數字皆 ≧ 1 以及 ≦ 10。

範例 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]


解題思維:
其實跟這題相當地類似,而本題的遞迴式又更精簡。

定義一個陣列 D,其中 D[i] 代表著有多少陣列將會輸出成由 s 前 i 個字元組成的子字串(即 S[0] ~ S[i - 1];如果 i == 0,則該子字串為一空字串)。可以看到遞迴式為:
    D[0] = 1、
    D[i] = 「所有 D[j] 之總和」,其中 i > 0 且索引值 j 滿足 s[j] ~ s[i - 1] 所形成數字 ≧ 1 且 ≤ k。

而所求即為 D[s.length]。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作