b_lc_将字符串拆分为递减的连续值(先枚举第一个数+dfs)

判断能否将 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
}
posted @ 2021-05-06 18:15  童年の波鞋  阅读(60)  评论(0编辑  收藏  举报