File tree Expand file tree Collapse file tree 1 file changed +88
-0
lines changed Expand file tree Collapse file tree 1 file changed +88
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ 有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
3
+
4
+ 现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
5
+
6
+ 示例 1:
7
+
8
+ 输入:
9
+ bits = [1, 0, 0]
10
+ 输出: True
11
+ 解释:
12
+ 唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
13
+
14
+ 示例 2:
15
+
16
+ 输入:
17
+ bits = [1, 1, 1, 0]
18
+ 输出: False
19
+ 解释:
20
+ 唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
21
+
22
+ 注意:
23
+
24
+ 1 <= len(bits) <= 1000.
25
+ bits[i] 总是0 或 1.
26
+ */
27
+
28
+ bool isOneBitCharacter(int* bits, int bitsSize)
29
+ {
30
+ if(bitsSize == 1 && bits[0] == 0)
31
+ return true;
32
+ if(bits[bitsSize-1] == 1)
33
+ return false;
34
+ else
35
+ {
36
+ if(bits[bitsSize-2] == 0)
37
+ return true;
38
+ else
39
+ {
40
+ int cnt = 0;
41
+ int i = 0;
42
+ while(bitsSize - 2 - i >= 0)
43
+ {
44
+ if(bits[bitsSize-2-i] == 1)
45
+ cnt++;
46
+ else
47
+ break;
48
+ i++;
49
+ }
50
+
51
+ if(cnt % 2 == 0)
52
+ return true;
53
+ else
54
+ return false;
55
+ }
56
+ }
57
+ }
58
+
59
+ /*
60
+ 依据编码规则,对编码字符串归纳如下:
61
+ 1、检查最后一位,如果是1,直接return False,如果是0,检查倒数第二位;
62
+ 2、倒数第二位是0 return True。
63
+ 3、倒数第二位不是0,检查0前有几个连续1,奇数个:False, 偶数个:True。
64
+ */
65
+
66
+ bool isOneBitCharacter(int* bits, int bitsSize)
67
+ {
68
+ if(bitsSize == 1)
69
+ return true;
70
+ int i = 0;
71
+ while(i < bitsSize - 1)
72
+ {
73
+ if(bits[i] == 0)
74
+ i++;
75
+ else if(bits[i] == 1)
76
+ i = i + 2;
77
+ }
78
+ if(i == bitsSize)
79
+ return false;
80
+ return true;
81
+ }
82
+
83
+ /*
84
+ 1、最后一位为0才可能正确。
85
+ 2、排除1,如果只有一个数,则对。
86
+ 3、排除1、2,从头数,由于1后面必须接0或1,所以遇到1则跳一位。
87
+ 如果能够跳到bitsSize-1,则说明符合,否则错误。
88
+ */
You can’t perform that action at this time.
0 commit comments