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行的地方 一定要先判断是否跳出边界了,再判断最后的数字,否则。。你猜呢。

这个方法显然比第一个好的多。

说实话第一个方法我回头再看的时候也是有点懵逼的,希望自己可以越来越进步吧

posted @ 2018-10-10 15:18  远途  阅读(156)  评论(0编辑  收藏  举报