(FB) Excel Sheet, Remove Duplicates

比较简单,一次 AC. 这个代码不算是最简洁的,但是面试将近,我的代码风格开始向 “容易看懂 + 好交流 + 失误率低” 靠拢。。

26 - Z

52 - AZ

1000 - ALL

这里面的 'Z' 其实相当于 N 进制里面的 0;代表着 place holder.

可以看到填充顺序其实是从后往前,每一步取 % 26 的余数。只有 26 的倍数比较特殊,余数为 0 的时候,append Z 并且要减去 26,其他时候用 offset 就好了。

public class Solution {
    public String convertToTitle(int n) {
        if(n <= 0) return "";

        StringBuilder sb = new StringBuilder();
        while(n > 0){
            int digit = n % 26;

            if(digit == 0){
                sb.append('Z');
                n -= 26;
            } else {
                char chr = (char)('A' + digit - 1);
                sb.append(chr);
            }

            n = n / 26;

        }
        return sb.reverse().toString();
    }
}

掌握了这个特性之后,解码就变得非常容易了。。

60秒 AC .. 这么水题我都有点不好意思了。。。

也挺简单的,但是多了几个细节:

  • 这次是只要是 duplicate 就全跳过;

  • 因此看到一截重复的就全部跳过,但同时要注意不要假设一段重复的后面不会接着出现另外一段;所以处理完一段直接 continue;

  • dummy node 不能无脑连 head ,没准 head 里面的一个都不取,所以就建个 dummy 之后 next 先空着,自己一个一个加上去;

  • 从 dummy 出发的 cur 连完了之后,要记得循环结束时切断尾巴,因为我们在循环中只跳过,没切断,最后的收尾要自己做一下。

Last updated

Was this helpful?