首页 > 其他 > 详细

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

时间:2020-06-01 23:13:28      阅读:116      评论:0      收藏:0      [点我收藏+]

题目:给定一个正整数,返回它在 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();
    }

 

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

原文:https://www.cnblogs.com/yxym2016/p/13027680.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!