方案一:
递归方法
class Solution:
def countAndSay(self, n: int) -> str:
if n==1 :return "1"
elif n==2 :return "11"
elif n==3 :return "21"
elif n==4 :return "1211"
elif n==5 :return "111221"
else :
strs = self.countAndSay(n-1)
lis = list(strs)
sts =[]
start = len(lis)-1
q = lis[start]
for i in range(len(lis))[::-1]:
temp =[]
q = lis[start]
if lis[i]!=q:
temp = lis[i+1:]
del lis[i+1:]
start = i
lens = 0
sts.append(int(q))
sts.append(temp.count(q))
sts.append(int(lis[0]))
sts.append(lis.count(lis[0]))
sts_reverse = list(reversed(sts))
return "".join(str(i) for i in sts_reverse)
方案二:
模拟
a=['1']
n=4
for i in range(n-1):
b=1
a.append('')
aa=[]
print(a)
for j in range(len(a)-1):
if a[j] == a[j+1]:
b+=1
else:
aa.append(str(b))
aa.append(str(a[j]))
b=1
a=aa
print(''.join(a))
知识点一:
reversed 函数返回一个反转的迭代器。
语法
以下是 reversed 的语法:
reversed(seq)
参数
seq -- 要转换的序列,可以是 tuple, string, list 或 range。
返回值
返回一个反转的迭代器。
知识点二:
StringBuilder sb = new StringBuilder();
StringBuilder是一个类,可以用来处理字符串,最简单的用法:
StringBuilder sb=new StringBuilder();
sb.Append("123");
sb.Append("456");
string str=sb.ToString();
最后得到的str字符串的值就是"123456",这种用法要比直接字符串相加效率高,比如:
string s1=“123”;
string s2=“456”;
string str=s1+s2;
得到的结果相同,但在处理大规模的字符串的时候第二种方法效率会变低。
知识点三:
string.join()
Python中有join()和os.path.join()两个函数,具体作用如下:
join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
os.path.join(): 将多个路径组合后返回
一、函数说明
1、join()函数
语法: 'sep'.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
返回值:返回一个以分隔符sep连接各个元素后生成的字符串
1 #对序列进行操作(分别使用' '与':'作为分隔符)
2
3 >>> seq1 = ['hello','good','boy','doiido']
4 >>> print ' '.join(seq1)
5 hello good boy doiido
6 >>> print ':'.join(seq1)
7 hello:good:boy:doiido