1416. 恢复数组
1416. 恢复数组
题目描述:
某个程序本来应该输出一个整数数组。但是这个程序忘记输出空格了以致输出了一个数字字符串,我们所知道的信息只有:数组中所有整数都在 [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 。
示例 5:
输入:s = “1234567890”, k = 90
输出:34
提示:
1 <= s.length <= 10^5.
s 只包含数字且不包含前导 0 。
1 <= k <= 10^9.
思路:
我摊牌了,我不会做,是看懂大佬的代码的,https://leetcode-cn.com/problems/restore-the-array/solution/dong-tai-gui-hua-zhu-zi-fu-jie-xi-pan-duan-you-duo/
代码:
func numberOfArrays(s string, k int) int {
var mod int
var dp[100002] int
mod = 1000000007
dp[0]=1
for i:=1;i<=len(s);i++{
for j:=i-1;j>=0;j--{
if s[j]=='0'{
continue
}
s1:=s[j:i]
num,err:=strconv.Atoi(s1)
if err !=nil{
}
if num<=k{
dp[i]+=dp[j]
}else{
if s[i-1]=='0'&&dp[i]==0{
return 0
}
break
}
}
dp[i]%=mod
}
return dp[len(s)]%mod
}
代码效率:
执行用时:44 ms, 在所有 Go 提交中击败了30.77%的用户
内存消耗:2.2 MB, 在所有 Go 提交中击败了100.00%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!