微软面经题目求教

大佬们碰到过一道encode digit的题目吗,给一串二进制位序列,把他们转化成字母,比如 00->a, 01->b, 10->c, 11->d; 如果序列长度不能整除,比如序列是00101,可能不使用额外的字母来把他记录下来吗,前两天微软onsite的follow up,没啥好的想法

这个跟FB的经典题 decode ways有什么区别

感觉这两个不是太一样吧?
这个题其实想问的很简单
比如 000->a, 001->b, 010->c, 011->d, 100->e, 101->f, 110->g, 111->h, 用x表示现在有几个padding的0,
那么 01010101 可以表示成 c f c x, 这样可以唯一的decode回本身的二进制序列。
面试官的follow up是,可不可以把额外的x也去掉,只用 a,b,c,d,e,f,g,h 来表示上面的序列,使它仍然能够被唯一的decode回去?

还是不太明白题意,01010101 可以表示成 c f c x,怎么说?

可能我说的不太清楚,直接带入一下,c 替换成 010, f 替换成 101, c f c -> 010_101_010; 现在其实没有真的还原这个序列,使用最后的一个x表示有一个额外的0被加进去了,c f c x -> 010_101_01(0), 括号中的0因为x而被移除了。
再比如原始的序列是 0101010101,那就可以表示成 c f c e x x, -> 010_101_010_1(00), 这个解法面试官是满意的,不过他似乎希望我给出一个不需要使用x的解法…

你的解法理解了,但是不理解题目要求啥?不需要x的解法?原题要解决啥

我理解的就是,他想问我,比如上面的序列 010101010, 如果只可以使用 a,b,c,d,e,f,g,h, 还能不能把序列准确的表示出来。。

a到h必须全部用吗?不然我就a和b两个算了

您这么说也是,不过我觉得这样似乎也没什么意义了,相当于直接把原本的序列复制了一遍
感觉我也有点凌乱了,不知道那个面试官的考点在哪里

很多人其实是对题目理解问题,不是解法问题 :rofl:

:rofl: