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