LeetCode 171 - Excel 表列序号

  1. Excel 表列序号 (LeetCode)

题目 给你一个字符串 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 <= columnTitle.length <= 7
columnTitle 仅由大写英文组成
columnTitle 在范围 [“A”, “FXSHRXW”] 内

先把解题丢出来吧
题目意思:
个位 A = 1;
十位 A = 1 * 26;
百位 A = 1 * 26 * 26;

个位 B = 2;
十位 B = 2 * 26;
百位 B = 2 * 26 * 26;

输出:个位+十位+百位

eg:
AB = A : 1 * 26 + B : 1 = 27
ZY = Z : 26 * 26 + Y : 25 = 701

所以我们可以得出规律:
位值:应该就是 当前的 字符所代表的值 乘以 26 的 n 次方
n :个位零次,十位一次,百位两次,,,可以得知,是当前字符所在的 位置决定的,
换算成代码,应该就是 (当前位 - 1) 次方;

Math.pow(底数,几次方)
eg : Math.pow(4,3) = 4 的 3 次幂 (444) 的值 = 4 * 4 * 4

思路: ascii码 是递增的 类似 A~Z ,而ascii码 A = 65 ,B = 66 ,,,
我们可以通过获取 该字符的 ascii码 值减去 64 就等于当前 字符代表的个位数 的数值
然后 算下 当前值 是多少,然后累加。

    private int result(String columnTitle){
    	//用于统计总数
        int count = 0;
        // 确定顺序 从左到右 从最高位开始
        for (int i = 0 ; i < columnTitle.length()  ; i++){
            //获取 字符 
            char temp = columnTitle.charAt(i);
            //获取 字符代表的数字
            int num = temp - 64;
            //获取当前 字符的次方值
            double rate = Math.pow(26,columnTitle.length() - 1 - i);
            //转成int型
            int t1 = Double.valueOf(rate).intValue();
            //总计 加上  这次的值  数字*次方值
            count = count + num * t1 ;
        }
        return count;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值