天天看點

LeetCode 168 Excel表列名稱(Java實作)

題目描述:

LeetCode 168 Excel表列名稱(Java實作)

值得注意的是:十進制是0 1 2 3 4 5 6 7 8 9;二進制是0 1 。

而題中1對應A,2對應B…26對應Z,是從1開始的,而不是0。是以要進行減一操作。

主要是1-26是單個字母,27-+~是多個字母(至少兩個,而且是從AA開始),代碼二我是以這個為突破點,試了兩遍才寫對,第一遍是ZY這個點沒處理好,輸出AnullY,是進位問題。

代碼二是用HashMap做,代碼一是ASCII碼。

PS:自我感覺HashMap更好了解題意

代碼一:

class Solution {
    public String convertToTitle(int n) {
        StringBuilder sb = new StringBuilder();
        while(n>0){
            n--;
            sb.append((char) ('A' + n % 26));
            n = n / 26;
        }
        return sb.reverse().toString();
    }
}
           

結果:

LeetCode 168 Excel表列名稱(Java實作)

代碼二(HashMap):

class Solution {
    public String convertToTitle(int n) {
        HashMap<Integer,Character> map = new HashMap<Integer,Character>();
        int c = 0;
        for(char i = 'A';i <= 'Z';i++){
            map.put(c++,i);
        }
        StringBuilder sb = new StringBuilder();
        if(n <= 26){
            sb.append(map.get(n-1));
        }else{
            while(n>0){
                n--;
                sb.append(map.get(n % 26));
                n = n / 26;
            }
        }
        return sb.reverse().toString();
    }
}
           

結果:

LeetCode 168 Excel表列名稱(Java實作)