• 进制转换--十进制转二十六进制(力扣168题)


    题目:给定一个正整数,返回它在 Excel 表中相对应的列名称。

    例如,

    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB 
    ...

    分析:其实就是一个十进制转换为二十六进制数的问题,只不过是现在需要注意,没有从0开始了,而是从1开始,到26结束,对于1-26以内的数直接利用哈希就可以直接求出来,但是对于大于26的数就需要分开考虑了,即:

      1、大于26,但不是26的倍数,那么就利用常规的“/”和“%”运算就可以求出来,模运算负责求出当前位的数,除法运算负责向前进位

      2、大于26,但是是26的倍数,那么这个就要慎重考虑,不能直接利用上面的运算了,因为是从1开始而不是从0开始的,并且26有实际对应的字母,所以如果出现了26的倍数,那么就在进行除法运算之后,再对n减一,减一是因为当前的低位可以用Z表示一个26,然后剩余减去这一个26之后的值将在高位进行表示。

    代码:

        public String convertToTitle(int n) {
            char[] map = {'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            if (n <= 26){
                return map[n] + "";
            }
            StringBuilder sb = new StringBuilder();
            while (n > 0){
    
                char c = map[n%26];
                if (n % 26 == 0){
                    n /= 26;
                    n--;
                }else {
                    n /= 26;
                }
                sb.append(c);
            }
            return sb.reverse().toString();
        }
  • 相关阅读:
    sys模块详解
    os模块详解2
    tyvj 1203 机器分配
    洛谷 P1496 火烧赤壁
    P1204 [USACO1.2]挤牛奶Milking Cows
    bzoj 2120 数颜色
    P2056 采花
    P1972 [SDOI2009]HH的项链
    9.20模拟赛
    P2709 小B的询问
  • 原文地址:https://www.cnblogs.com/yxym2016/p/13027680.html
Copyright © 2020-2023  润新知