leetcode168_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 
    ...

Example 1:

Input: 1
Output: "A"

Example 2:

Input: 28
Output: "AB"

Example 3:

Input: 701
Output: "ZY"

写的代码报错之后修改了几下,但还是存在报错:

//感觉就是个26进制与10进制的转换
//'A'+(2-1)=66 这样可以转换数字与字母

class Solution {
    public String convertToTitle(int n) {
        StringBuilder res = new StringBuilder();
        int i=1;
        char a;
        if(n==0) return "";//返回空字符串可以直接写成""
        while(n!=0){
            int c=1;
            for(int j=i;j>0;j--){
                c=c*26;
            }
            int temp=n%c;
            if(temp==0){//报错发现26的余数是0,剩下的是1;应该余1剩0
                temp=26;
                n=n/c-1;
            }
            else{n=n/c;}
            a = (char)('A'+temp-1);//char+int=int最后的结果是ASII码数值
            //int转换成char用(char)强制转换
            res.insert(0,a);//insert可以将int、char、string插入字符串的指定位置
            i++;
        }
        String result=res.toString();
        return result;
    }
}

703/26=27余1,27/26=1余1,但出现了[=91=65+91-1???

最后发现是被除数的地方写错了,第一次除以26,第二次仍应该除以26,而不是26*26。。。

怪不得觉得这个地方写的有些新奇,想一下,十进制的转换一直都是除以10,取剩数余数,二十六进制也是同理。

修改了这个地方之后就好了(原来都想放弃了。。。)

java代码如下:

//感觉就是个26进制与10进制的转换
//'A'+(2-1)=66 这样可以转换数字与字母
class Solution {
    public String convertToTitle(int n) {
        StringBuilder res = new StringBuilder();//字符串的新建
        int i=1;
        char a;
        if(n==0) return "";//返回空字符串可以直接写成""
        while(n!=0){
            int c=26;
            int temp=n%c;
            if(temp==0){//报错发现26的余数是0,剩下的是1;应该余1剩0
                temp=26;
                n=n/c-1;
            }
            else{n=n/c;}
            a = (char)('A'+temp-1);//char+int=int最后的结果是ASII码数值
            //int转换成char用(char)强制转换
            res.insert(0,a);//insert可以将int、char、string插入字符串的指定位置
            i++;
        }
        String result=res.toString();//字符串的最终生成
        return result;
    }
}

这个题在写的过程中遇到了很多很多的问题,不管是设计的逻辑,还是对字符串各种处理的不熟悉。

虽然提交之后运行时间是0ms,但查看了一下最佳代码,发现别人写的好简洁,以后就记住这个写法吧。

最终版:

class Solution {
    public String convertToTitle(int n) {
        StringBuilder sb=new StringBuilder();
        while (n>0) {
            n--;//直接n减去1,解决了一切问题,z=26也不会出现剩1余0的现象了。。。
            sb.append((char)('A'+n%26));//注意强制转化的写法,是(char)括号在前
            n=n/26;
        }
        return sb.reverse().toString();//先append添加字符,再最后用.reverse()反向,不需要insert那么复杂。。。
    }
}

跟别人差距比较大,还是得好好加油啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值