题目链接:
题目描述:
Give 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
题目解释:
给一个字符串(只有大写字母组成)返回这个字符
串所对应的值。
A代表1,B代表2 ; AA代表27,AB代表28,以此类推。
解题方案:
由题干的描述我们可以知道,这道题类似于进制的进位
十进制数到9时再加1就成为10,进一位。而这个字母则
是到Z的时候要进位,比如Z代表26,27是26的下一个数
Z + 1 个位就成为A了,然后再进位1,成为AA,于是
AA就代表27.
源码:
int titleToNumber(char *s)
{
//char *s = "AB";
//printf("%s\n",s);
int result = 0;
int count = 0;//记录字符串的总长度
int power = 26;//进制
while(s[count] != '\0')
{
count++;
}
for(int i = count - 1; i >= 0; --i)//将每一个字符转化为相应的数字相加
{
if(i == count - 1) //最后一位数乘的是26的0次幂
{
result += s[i] - 'A' + 1;
}
else
{
result += (s[i] - 'A' + 1) * power;
power *= 26;
}
}
//printf("%d\n", count);
return result;
}
PS:LeetCode中提交的函数名要严格按照题目给定的
函数名书写,比如这个题目中的函数名为titleToNumber(char *s)
如果你自己改为titletoNumber(char *s)就不行,会CE的。
我就是因为这个原因才出现三次CE。