一、按个数输出字符
题目:给定一个仅由字母和数字组成的字符串,遍历该字符串,每遇到数字,则记录连续出现的数字,并按照该组数字的次数输出该组数字和前一组数字之间的字符串。
示例:
str = a2b3d4,输出aabbbdddd
str = a10b3,输出aaaaaaaaaabbb
str = 2ab,不输出
str = a2b,输出aa
class Solution:
def printstr(self, arr):
if not arr:
return
n = len(arr)
s = '' #字符可能连续,比如ab4,输出abababab
res = ''
for i in range(n-1): #O(n)的时间复杂度解决
if arr[i] >= 'a' and arr[i] <= 'z':
s += arr[i]
j = i+1
if arr[j] >= '0' and arr[j] <= '9':
nums = int(arr[j])
#存在数字>9,即2位数及以上的
while j+1<n and arr[j+1] >= '0' and arr[j+1] <= '9':
j += 1
nums = int(arr[j]) + 10*nums
res += nums*s
i = j+1
s = '' #连续字符记得重新置0
elif arr[i] >= '0' and arr[i] <= '9':
continue
return res
二、数字输出对应的中文读数
1、输入的数字是数值格式:
def TransNum(self, num):
if not num:
return
dict_n ={1:'一', 2:'二', 3:'三', 4:'四', 5:'五', 6:'六', 7:'七', 8:'八', 9:'九', 10:'十', 100:'百', 1000:'千', 10000:'万', 100000:'十万', 1000000:'百万', 10000000:'千万'}
ret = ''
num = int(num)
i = 1
while num != 0: #12345
b = num%10 #4
tmp = dict_n[b]
if i != 1:
tmp = dict_n[i]+tmp #倒着加,40:十四
i = i *10
num = num //10
ret += tmp
ret = ret[::-1]
return ret
2、数值格式是字符:
def TransNum(self, num):
if not num:
return
dict_n ={1:'一', 2:'二', 3:'三', 4:'四', 5:'五', 6:'六', 7:'七', 8:'八', 9:'九', 10:'十', 100:'百', 1000:'千', 10000:'万', 100000:'十万', 1000000:'百万', 10000000:'千万'}
ret = ''
num = int(num)
i = 1
while num != 0: #12345
b = num%10 #4
tmp = dict_n[b]
if i != 1:
tmp = dict_n[i]+tmp #倒着加,40:十四
i = i *10
num = num //10
ret += tmp
ret = ret[::-1]
return ret