当前位置:网站首页>LeetCode刷题|38外观数组
LeetCode刷题|38外观数组
2022-04-23 05:58:00 【杜小瑞】
做了半天的一道题一看竟然是一道简单题。。
题目描述
地址:外观数组
题目意思很好理解,就是一个递归的过程,从‘1’开始,对每一个输入字符串做一个几个几这样格式的描述,然后再把这个描述作为下一次的输入,直到求出第n项的结果。
解法一
这题是一个比较明显的递归题目,但是由于我递归学的不好,所以就考虑如何不使用递归直接做出来。那么简单说一下我的想法。我的做法就是先写一个将输入字符串进行划分并描述的函数,然后反复调用这个函数就可以了。所以这种方法的重点在于如何写字符串划分并描述的函数。
class Solution:
def countAndSay(self, n: int) -> str:
if n ==1:
return '1'
res = self.countandsay('1')
for i in range(2,n):
t = self.countandsay(res)
res = t
return res
def countandsay(self, s: str) -> str:
res = []
count = 1
pres = s[0]
i, n = 1, len(s)
if n == 1:
res.append('1')
res.append(str(s[0]))
return ''.join(res)
while i < n:
if pres == s[i]:
count = count + 1
i = i+1
else:
res.append(str(count))
res.append(str(pres))
pres = s[i]
count = 0
if count > 0:
res.append(str(count))
res.append(str(s[n-1]))
return "".join(res)
求字符串的描述直接对字符串遍历,比较每一个字符跟前一个字符是否相同并计数,然后在数组中保存每一次遍历到的字符以及出现的次数,最后将数组转化为字符串返回。
递归+双指针
来自评论区的方法,感觉这才是这题要考的东西。
class Solution:
def countAndSay(self, n: int) -> str:
if n == 1:
return '1'
s = self.countAndSay(n - 1)
ans = ''
start, end = 0, 0
while end < len(s):
while end < len(s) and s[start] == s[end]:
end += 1
ans += str(end - start) + s[start]
start = end
return ans
作者:喜欢叶梓的汪
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/?discussion=sKH5WT
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
递归还是需要好好学一下
版权声明
本文为[杜小瑞]所创,转载请带上原文链接,感谢
https://blog.csdn.net/DXRfighting/article/details/116890778
边栏推荐
猜你喜欢
Decentralized Collaborative Learning Framework for Next POI Recommendation
SignalR实现从服务端主动发送数据到客户端
TP5 error reporting variable type error: array solution
JS performance optimization
Installing redis using a small leather panel in the window environment
1-4 NodeJS的安装之配置可执行脚本
tp5 报错variable type error: array解决方法
leetcode之爬楼梯方法数
压力测试工具 Jmeter
SQL学习|复杂查询
随机推荐
C# 监听WMI事件
Leak detection and vacancy filling (IV)
Get DOM element location information by offset and client
JS handwriting compatibility event binding
微信小程序
1-3 组件与模块
.Net Core 下使用 Quartz —— 【3】作业和触发器之作业传参
js中entries(),keys(),values() , some(), Object.assign()遍历数组用法
leetcode刷题之二进制求和
【Markdown笔记】
Decentralized Collaborative Learning Framework for Next POI Recommendation
条形码与二维码的生成
C# webpai 路由详解
file_ get_ Two solutions to content accessing SSL errors
初步认识Promse
freeCodeCamp----arithmetic_arranger练习
阅读笔记:Secure Federated Matrix Factorization
虚拟环境中使用jupyter notebook
批量修改/批量更新数据库某一个字段的值
js更改全部变量失败后改成return方法,终于解决解决问题