Leetcode 717. 1-bit and 2-bit Characters
题目要求判断一组数最后一位是不是可以单独表示成为 0
规则要求1 后面需要搭配一个 1 或者 一个 0,0可以单独出现, 所以我们只要保证最后这个 0 是一个单独的, 不和前面的1 组成配对即可。
说下我的两种思路 一个栈的使用,一个循环
先说栈 我打算把最后一位数字空出来,看前面所有数能不能恰好消耗掉,如果可以并且最后这个数 0 肯定就是单独的。
7行初始化一个栈,为什么要有一个默认的字符串呢,在我需要判断stack[-1] 的时候需要有数据并且不能跟 目标 0或者1干扰。
for i in bits[:-1] 我丢掉最后一个元素遍历
如果前面一个元素是1 那么后面这个元素就是 和1组成一对的,不管这个元素是1 还是 0,所以我直接丢掉这两个元素。
直到最后我的stack 里面剩余的元素最后如果不是 1 的话,并且原来的数据最后是 0 的话,那么就是一个单独的 0,否则
这个0 会跟stack 里面的1 配对。就失败了。
总结一下这个方法,虽然思路没有什么问题,但是有点丑陋。原因如下
stack = ["s"]的定义有点莫名其妙,频繁的pop, append 也不那么优雅,并且其实并不需要这样做。而且还需要额外的bits[:-1]和 stack的 空间
循环方法就清晰的多,从头遍历,但结果的边界我仍然设置为倒数第二个数,如果遇到1 我就跳两步,因为1是跟后面数组队的嘛,如果遇到0就跳一步。跳到最后的情况是
跳出界了,说明跳之前的结尾是 1,1 或者 1, 0直接跳出去了,就说明没有单独的 0了,第二个在最后一个数停下来了,如果这个数是0 就成功,否则最后是1 不能单独表示
失败了。14行的地方 一定要先判断是否跳出边界了,再判断最后的数字,否则。。你猜呢。
这个方法显然比第一个好的多。
说实话第一个方法我回头再看的时候也是有点懵逼的,希望自己可以越来越进步吧