1.一个矩阵,里面有很多格子,从左上角开始,只能朝下或者朝右走,走到右下角。有多少种走法?
这个是朋友面试遇到的题,猛的一看,我的反应是图问题。
但是图解决的是最短路径问题。
然后考虑到右下角的左边和上边的块的情况。
然后我想到了杨辉三角。
找到杨辉三角的中心那个数就可以了。
杨辉三角
def triangel1(n):
L = [1]
while True:
yield L
L = [L[x] + L[x-1] for x in range(len(L)-1)]
L.insert(0,1)
L.append(1)
if len(L) > 10:
break
答案
def triangel1(n):
L = [1]
while n:
L = [L[x] + L[x-1] for x in range(len(L)-1)]
L.insert(0,1)
L.append(1)
n -= 1
return L
print(max([max(i) for i in triangel(5)]))
2.字符串压缩问题。
"aaac" -----> 输出 “a3c"
"a" --------> 输出 "a"
本来考虑用字典,但是这个用字典很明显不合适。就用的字符串拼接。
对字符串中间进行判断以及最后一步,需要单独判断。
写的有点复杂,有更好的方法。可以私信我。谢谢!
现在回头看之前的代码,体会到了成长。
mystr = "abbbbbdeddddegg"
#def zifu(a):
# result = ""
# i = 0
# count = 1
# while len(a) != i+1:
# if mystr[i]==mystr[i+1] and i+1<len(a):
# count += 1
# i += 1
# else:
# if count == 1:
# result += str(mystr[i])
# else:
# result += str(mystr[i])
# result += str(count)
# count = 1
# i += 1
# if count != 1:
# result += str(mystr[i])
# result += str(count)
# else:
# result += str(mystr[i])
# return result
# print(zifu(mystr))
mystr = "abbbbdeddddegggga"
def zipstr(mystr):
result, count = "", 1
if not mystr: return ""
for i in range(1, len(mystr)):
if mystr[i] == mystr[i-1]:
count += 1
else:
result += "{}{}".format(mystr[i-1], count)
count = 1
return result + "{}{}".format(mystr[len(mystr)-1], count)
print(zipstr(mystr))