【笔试代码题记录】190602


 

190602 字符串解码

字节跳动原题,leetcode394 Decode String
解法:栈 ! 因为有嵌套,所以先出现的”[“,它对应的”]“越往后,先进后出,用栈可以实现。
注意,这一题有很多细节,比如:

  1. 出现类似2[e3[f]]这样嵌套的情况,需要判断,判断规则是:将当前“[”弹出后,栈是否为空,如果不为空,说明有嵌套,需要将该字符串合并到外层是stack中继续,不能直接添加到输出list中;
  2. 每一次弹出一组[]框的时候,不仅要将字符串复制前面的整数倍,而且要记得将num清空;
  3. 不在[]里面包含的字符,直接添加到输出list中。
class Solution:
    def decodeString(self, s: str) -> str:
        if not s:
            return ""
        stack = []
        res = []
        num = ""
        for ch in s:
            if ch.isdigit():
                num += ch
            elif ch == "[":
                stack.append(["", num])
                num = ""
            elif ch == "]":
                data = stack.pop()
                string, num = data[0], data[1]
                if stack:  # 如果stack不为空,说明有嵌套
                    stack[-1][0] += string * int(num)
                else:
                    res += string * int(num)
                num = ""
            else:
                if stack:
                    stack[-1][0] += ch
                else:
                    res += ch
        return "".join(res)

 

190602 景点的最大评分

北京有N个景点,第i个景点的评分用a[i]表示,两个景点i和j之间的距离为j - i(j > i),小明一天只能玩两个景点,总评分是两个景点的评分之和减去距离,即a[i] + a[j] + i - j,问,选择哪两个景点可以使评分最大?

【输入描述:】
第一行输入N(```2 <=N <= 100000`)
第二行输入N个景点的评分(1 <= a[i] <= 1000)

【输出描述:】
最大评分

【输入示例:】
5
11 6 5 18 12

【输出示例:】
29

 

190602 数组中区块的个数

题目要求:输入一个只包含0和1的二维数组,上下左右和对角相邻的1组成一个区块,0不形成区块,求数组中区块的个数。
【输入示例:】
3 3(表示3行3列)
0 1 0
1 0 0
1 0 1

【输出示例:】
2

【说明:】
除了右下角的1单独形成1个区块之外,其他的1对角或上下相邻形成1个区块。

 

190602 总移动距离最短

在这里插入图片描述
在这里插入图片描述

第二次笔试题

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值