python面试题(3)

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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值