判断能否将 s 拆分成两个或者多个 非空子字符串 ,使子字符串的 数值 按 降序 排列,且每两个 相邻子字符串 的数值之 差 等于 1(len(s)<=20)
输入:s = "050043"
输出:true
解释:s 可以拆分为 ["05", "004", "3"] ,对应数值为 [5,4,3]
剪枝:len(s)<=20,说明如果一个数大于10^10的话,那后面最多也只有 9 位数,可提前返回 fasle
func dfs(i, pre int, s string) bool {
if i == len(s) {
return true
}
x := 0
for j := i; j < len(s); j++ {
x = x * 10 + int(s[j]) - int('0')
if x + 1 == pre && dfs(j+1, x, s) {
return true
}
}
return false
}
func splitString(s string) bool {
n, x := len(s), 0
for i := 0; i < n-1; i++ {
x = x * 10 + int(s[i]) - int('0')
if dfs(i+1, x, s) {
return true
}
}
return false
}