168 Excel Sheet Column Title

题目链接:https://leetcode.com/problems/excel-sheet-column-title/

题目:

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

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

解题思路:
本题考点:数学的公式推导。
说白了就是找递推式。
1 -> A
1 + 26 * 1 -> AA
1 + 26 * 2 -> BA
1 + 26 * 3 -> CA
1 + 26 * (1 + 26 * 1) -> AAA
1 + 26 * (26 + 26 * 1) -> AZA

规律为:
1. 每 26 个字母为一轮,n 与 26 的每一次模值都获得一个字符的值。
2. n 与 26 的第一次模值获得从右到左第一位字符。
3. n 除以 26 更新 n。
4. 模值为 0 时,应为字母 Z。

需要注意的是,在 JAVA 中,’A’ + 1 不能直接得出字符 B,char 类型和 int 类型相加时转换为整型(向大的转),获得的是 B 的 ASCII 码,为了得到字符 B 必须进行类型转换,(char)(‘A’ + 1)。

代码实现:

public class Solution {
    public String convertToTitle(int n) {
        StringBuilder sb = new StringBuilder();
        while(n != 0) {
            int tmp = n % 26;
            if(tmp == 0) {
                sb.append('Z');
                if(n == 26)
                    break;
                n = (n - 26) / 26;
            }
            else {
                sb.append((char)('A' + tmp - 1));
                n /= 26;
            }
        }
        return sb.reverse().toString();
    }
}
18 / 18 test cases passed.
Status: Accepted
Runtime: 0 ms

网上更为简洁的代码实现:
参考链接:http://www.programcreek.com/2014/03/leetcode-excel-sheet-column-title-java/

public String convertToTitle(int n) {
    if(n <= 0){
        throw new IllegalArgumentException("Input is not valid!");
    }

    StringBuilder sb = new StringBuilder();

    while(n > 0){
        n--;
        char ch = (char) (n % 26 + 'A');
        n /= 26;
        sb.append(ch);
    }

    sb.reverse();
    return sb.toString();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值