Lintcode 973 解题思路及c++代码

**

973. 1位跟2位字符

**
*

题目:

**
我们有两个特殊的字符。第一个字符可以用一位 0 来表示。第二个字符可以用两位(10 或者 11)表示。

现在给出一个字符串表示若干位。返回最后一个字符是否必定为一位字符。给出的字符串总是以 0 结尾。

样例
样例 1:
输入:
bits = [1, 0, 0]
输出: True
解释:
解码它的唯一方法是两位字符和一位字符。所以最后一个字符是一位字符。

样例 2:
输入:
bits = [1, 1, 1, 0]
输出: False
解释:
解码它的唯一方法是两位字符和两位字符。所以最后一个字符不是一位字符。
注意事项
1.1 <= len(bits) <= 1000.
2.bits[i] 总是 0 or 1.

思路:
1.首先看到这个题目的时候我想到的是哈夫曼编码,但是仔细想想这只是需要我们验证一下而已,应该不需要这么做;
**2.如果我最后一位给的是1,那么我们可以肯定的结果肯定是false;
3.接着最后一位是0的时候才需要进一步考虑更多。如果所给的数组大小为length,那么除掉最后一位0,也就是还有length-1位,如果这length-1位刚好按照这个规则编码完,那么就输出true,否则输出false;
4.那怎么解读这个规则呢?其实很简单,从第一位开始,如果遇到0,直接下一位,如果是1,那就跳一位,到下下位。一直这么下去,那什么时候跳出这个循环呢???
条件应该是前length-1为,也就是下标到length-2;如果下标比length-2大或者等于length-2的时候跳出循环;那么问题来了,跳出循环的时候,我们的下标有两种可能性。第一是刚好前面length-1个刚好编码,下标等于length-1。第二就是不能刚好编码,按照我刚刚的循环规则,此时的下标不等于length-1。
总的思路就是这样子。下面附上我自己写的代码,虽然不是很好,但作为小白来说也不苛求速度了。在这里插入代码片

 bool isOneBitCharacter(vector<int> &bits) {
        int length=bits.size();
        int i=0;
        if(bits[length-1]==0)
        {
        	for(i=0;i<length-1;)
        		if(bits[i]==0) 	i++;
				else {
					i++;
					i++;
					}
		if(i==length-1) return true;
			else return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值