给你一个仅由数字组成的字符串 s 。
请你判断能否将 s 拆分成两个或者多个 非空子字符串 ,使子字符串的 数值 按 降序 排列,且每两个 相邻子字符串 的数值之 差 等于 1 。
例如,字符串 s = “0090089” 可以拆分成 [“0090”, “089”] ,数值为 [90,89] 。这些数值满足按降序排列,且相邻值相差 1 ,这种拆分方法可行。
另一个例子中,字符串 s = “001” 可以拆分成 [“0”, “01”]、[“00”, “1”] 或 [“0”, “0”, “1”] 。然而,所有这些拆分方法都不可行,因为对应数值分别是 [0,1]、[0,1] 和 [0,0,1] ,都不满足按降序排列的要求。
如果可以按要求拆分 s ,返回 true ;否则,返回 false 。
子字符串 是字符串中的一个连续字符序列。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/splitting-a-string-into-descending-consecutive-values
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

第一次提交WA

class Solution(object):def dfs(self, s1, s2):# print(s1, '@', s2)if len(s2)==0:return  1for i in range(1, len(s2)+1):# print("#",s2[0:i])if int(s1[-1]) == int(s2[0:i]) + 1:s1.append(s2[0:i])if (self.dfs(s1, s2[i:]) ==1):return 1return 0def splitString(self, s):""":type s: str:rtype: bool"""for i in range(1, len(s)):a = []a.append(s[0:i])# print(a, '#', s[i:])if self.dfs(a, s[i:]) == 1:return Truereturn False

dfs函数中s1用来保存已经分割的字符串,s2用来保存没有分割的字符串。
提交之后发现:

“200100” 未通过测试用例

调试查看输出信息:

在已经分好了[‘2’, ‘001’] 还有’00’没有分割时有两种情况

  1. 将’00’分割成2个数字→’0’与’0’
    ①行显示分好了[‘2’, ‘001’,‘0’] 还有’0’没有分割时,继续深搜’0’,
    ②发现数组最后一个元素’0’不等于没有分割的’0’+1 ,于是回退到已经分好了[‘2’, ‘001’] 还有’00’没有分割时的是
  2. 将’00’分割成1个数字 , 0
    发现已经分好的数里还有之前分成两个0时候的存的一个’0’,发现应该对未成功的分割进行删除。

修改代码

添加一句s1.pop()

class Solution(object):def dfs(self, s1, s2):if len(s2) == 0:return 1for i in range(1, len(s2) + 1):print(s1, '@', s2, "-> ",i,"->", s2[0:i], '#', s2[i:])if int(s1[-1]) == int(s2[0:i]) + 1:s1.append(s2[0:i])if (self.dfs(s1, s2[i:]) == 1):return 1else:s1.pop()return 0def splitString(self, s):""":type s: str:rtype: bool"""for i in range(1, len(s)):a = []a.append(s[0:i])# print(a, '#', s[i:])if self.dfs(a, s[i:]) == 1:return Truereturn False
if __name__ == '__main__':a = Solution()print(a.splitString(s="200100"))

重新提交

【leetcode】1849. 将字符串拆分为递减的连续值相关推荐

  1. LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)

    LeetCode--1849. 将字符串拆分为递减的连续值[Splitting a String Into Descending Consecutive Values][中等]--分析及代码[Java ...

  2. 1849 将字符串拆分为递减的连续值(递归)

    1. 问题描述: 给你一个仅由数字组成的字符串 s .请你判断能否将 s 拆分成两个或者多个非空子字符串 ,使子字符串的 数值按降序排列,且每两个相邻子字符串的数值之差等于 1 .例如,字符串 s = ...

  3. LeetCode 2138. 将字符串拆分为若干长度为 k 的组

    文章目录 1. 题目 2. 解题 1. 题目 字符串 s 可以按下述步骤划分为若干长度为 k 的组: 第一组由字符串中的前 k 个字符组成,第二组由接下来的 k 个字符串组成,依此类推.每个字符都能够 ...

  4. LeetCode 842. 将数组拆分成斐波那契序列(暴力查找)

    1. 题目 给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列 ...

  5. [LeetCode] Word Break II 拆分词句之二

    [LeetCode] Word Break II 拆分词句之二 Given a string s and a dictionary of words dict, add spaces in s to ...

  6. LeetCode实战:字符串相乘

    题目英文 Given two non-negative integers num1 and num2 represented as strings, return the product of num ...

  7. LeetCode实战:字符串相加

    题目英文 Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and ...

  8. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  9. 在Bash中将字符串拆分为数组

    本文翻译自:Split string into an array in Bash In a Bash script I would like to split a line into pieces a ...

最新文章

  1. mysql 连接url中useUnicode=truecharacterEncoding=UTF-8 的作用
  2. MIUI应用权限设置
  3. python标准模块--os
  4. Lesson 13.1 深度学习建模目标与性能评估理论
  5. 数据挖掘十大经典算法之——Naive Bayes 算法
  6. 聊聊高并发(三十六)Java内存模型那些事(四)理解Happens-before规则
  7. 深入浅出parallelStream
  8. (需求实战_进阶_02)SSM集成RabbitMQ 关键代码讲解、开发、测试
  9. CV《神经风格转换》
  10. JavaScript设计模式(一)-- 简单工厂模式
  11. PHPStrom 使用技巧以及基本设置教程【更新完结】
  12. JavaScript学习(八十六)—运算符知识点总结
  13. MySQL 基础操作
  14. KNX转485模块专用配置软件使用说明书
  15. java人民币金额大写_Java人民币金额数字转换成大写
  16. Ember.js和Vue.js对比,哪个框架更优秀?
  17. Java实现蓝桥杯VIP算法训练 预测身高
  18. 显卡驱动一定要更新吗?怎么更新显卡驱动?
  19. Doris FE启动流程源码详细解析
  20. 自制ip地址切换器ip.dat

热门文章

  1. CentOS系统重新删除磁盘分区和挂载、开机自启(大于2T做法)
  2. 推导Beta分布公式
  3. JNLP文件具体说明编辑
  4. python从键盘输入一个字符串、将小写字母全部_从键盘输入一个字符串,将其中的小写字母全部转换成大写字母...
  5. Java运行乱码,Idea编码设置
  6. 条形码数据的批量制作用什么软件?
  7. python计算机视觉学习———图像分割
  8. 机器学习 网站大全--陆续更新中
  9. Windows 10离线安装dotnetfx35
  10. [PHP]浅谈php混淆与反混淆