力扣第168题“Excel表列名称”的解题思路

参考代码:

class Solution {
    public  string convertToTitle(int columnNumber) {
        string result;


        while(columnNumber>0)
        {
            int current=(columnNumber-1)%26;
            columnNumber=(columnNumber-1)/26;
            char character;

            character='A'+current;
            result=character+result;
        }
        return result;
    }
}

大致思路: 

1对应A,26对应Z, 看起来像是27进位,似乎应该每次余27,每次除以27。

但是,因为1对应A,而27对应的也是A, 1%27=1, 27%27=0, 同一个A余数不同,构成矛盾。'/那么除以26行不行?

1%26=1,27%26=1,看起来这样似乎可以保持一致。

但是当26%26的时候,为0,可是实际的值却为z,又构成了新的矛盾。

所以,我们调整对应关系,让o对应A,25对应z, 26对应AA, 这样就构成了一一个正常的26进位。

这样对于A: 0%26=0, 对于AA: 26%26=0, 在余数这里可以保持一致。

新的对应关系是原先对应关系-1得到,所以在每次操作的时候, 都要让columnNumber-1, 得到新的对应关系。

值得注意的是可以先创建一个String result来将每一个字母串在一起,需要用到char强制类型转换。

上一篇:CompletableFuture组合式异步编程


下一篇:1385.两个数组间的距离值