力扣题168Excel表列名称/题171Excel表列序号

168.

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

例如:

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

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

示例 4:

输入:columnNumber = 2147483647
输出:"FXSHRXW"

1.自己的解法:当成26进制进行使用,但是要注意的是题目是从1开始的,我们要手动减1,当作从0开始

class Solution {
    public String convertToTitle(int columnNumber) {
        StringBuffer s = new StringBuffer();

        while(columnNumber > 0){
            columnNumber--;//手动减1
            int res = columnNumber % 26;
            s.append(numOfChar(res));
            columnNumber = columnNumber / 26;
        }

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

    public String numOfChar(int num){
        String s = "";
        switch(num){//从0开始
            case 0: s = "A"; break;
            case 1: s = "B"; break;
            case 2: s = "C"; break;
            case 3: s = "D"; break;
            case 4: s = "E"; break;
            case 5: s = "F"; break;
            case 6: s = "G"; break;
            case 7: s = "H"; break;
            case 8: s = "I"; break;
            case 9: s = "J"; break;
            case 10: s = "K"; break;
            case 11: s = "L"; break;
            case 12: s = "M"; break;
            case 13: s = "N"; break;
            case 14: s = "O"; break;
            case 15: s = "P"; break;
            case 16: s = "Q"; break;
            case 17: s = "R"; break;
            case 18: s = "S"; break;
            case 19: s = "T"; break;
            case 20: s = "U"; break;
            case 21: s = "V"; break;
            case 22: s = "W"; break;
            case 23: s = "X"; break;
            case 24: s = "Y"; break;
            case 25: s = "Z"; break;
        }

        return s;
    }
}

2.答案解法:针对上述方法,可以继续进行改进,利用ascii码就不需要使用switch语句了。

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

题源:力扣

171.

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号。

例如,

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

示例 1:

输入: columnTitle = "A"
输出: 1

示例 2:

输入: columnTitle = "AB"
输出: 28

示例 3:

输入: columnTitle = "ZY"
输出: 701

示例 4:

输入: columnTitle = "FXSHRXW"
输出: 2147483647

1.自己的解法:从后往前遍历字符串,然后按照26进制来进行计算。

class Solution {
    public int titleToNumber(String columnTitle) {
        int sum = 0;//总和
        int num = 1;
        int index = columnTitle.length() - 1;//从末尾开始遍历

        while(index >= 0){
            int digit = (int)(columnTitle.charAt(index) - 'A' + 1);//当前遍历到的字符代表的数值
            sum += num * digit;
            num *= 26; //当成26进制来做
            index--;
        }

        return sum;
    }
}

题源:力扣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值