<LeetCode OJ> 171 / 168 Excel Sheet Column Number & Title

Related to question Excel Sheet Column Title

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

For example:

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


分析:

基于前两天被LeetCode虐待了,今天选简单的来玩!

思路首先,显然这是哈希map(或者红黑树map)的应用对象
建立对应关系,map['A']=1...........map['Z']=26
那么对于

AC=26^1*map['A']+26^0*map['C']=29

class Solution {
public:
    int titleToNumber(string s) {
        if(s.empty())
            return 0;
        char ch='A';
        for(int i=0;i<26;i++)
            mapping[ch++]=i+1;
        int nLen=s.size(),ans=0;
        for(int i=0;i<nLen;i++)
            ans+=mapping[s[nLen-1-i]]*pow(26,i);
    
        return ans;
    }
    unordered_map<char,int> mapping;  
};


别人的写法,看来我想复杂了!

//思路首先,高位累乘权,再加上低位
class Solution 
{
public:
    int titleToNumber(string s) 
    {
        int ret=0;
        for(int i=0;i<s.size();i++)
        {
            ret*=26;//高位的权
            ret+=s[i]-'A'+1;
        }
        return ret;
    }
};

或者写成这样:

int titleToNumber(string s) {
    int len = s.length(), sum=0;
    for(int i=0;i<len;i++)
        sum += (int(s[i]-'A'+1))*pow(26,len-1-i);
    return sum;
}




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 

分析:

任何一个数都可以表示为,n= An*p^n + ... + A1*p^1+A0,其中Ai对应于大写字符,p就是权26

首先求出A0,怎么球呢?显然n%26即可,余数对应的大写字符就是所求低位字符。

怎么求A1呢?显然n/26求出的就是无权的A1,再取余即是A1的值,其对应的大写字符就是所求的较高位字符。

接着继续对n除以26,并取余(如果不为零的话)求出A2..........Ai.....

class Solution {
public:
    string convertToTitle(int n) {
        string str ="";
        while(n)
        {
            char letter = 'A'+(n-1)%26;
            str = letter+str;//最终形成letter在前str在后的拼接字符串
            n = (n-1)/26;
        }
        return str;
    }
};



注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/50477040

原作者博客:http://blog.csdn.net/ebowtang

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值