Excel Sheet Column Number

来源:互联网 发布:流星网络电视怎么注册 编辑:程序博客网 时间:2024/06/15 15:37

Excel Sheet Column Number

作者:money
标签:leetcode,C++

问题:

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

For example:

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

问题分析:

我的解法是很传统的n进制转10进制的做法。效率非常低。方法是从低位向高位不断加和,用到math库中的求n次方的方式求解。

result=s[0]×26n1+s[1]×26n2+...+s[n1]

s.size长度为n

实现代码:

#include <iostream>#include <string>#include <math.h>// submit these code to leetcode// beginusing namespace std;class Solution {public:    int titleToNumber(string s) {        int asc,result=0;        for(int i=s.size()-1;i>=0;i--)          {            asc=s[i]-64;            result=result+asc*pow(26,s.size()-i-1);          }        return result;    }};// end// submit these code to leetcodeint main(){  Solution s;  //test case  string str="AC";  int a;  a=s.titleToNumber(str);  std::cout<<a<<" ";  return 0;} 

其他解法:

从高位向低位不断加和求进制转换:

int result = 0;for (int i = 0; i < s.size(); result = result * 26 + (s.at(i) - 'A' + 1), i++);return result;

关于进制转换:

n进制转换为10进制:针对本题的优化方式,目前通常是2,8,10,16进制之间的转换,但是根据上面的优化解法,解法的迭代思路如下:

数字num为n进制数,其中num[i]为第i位所代表的10进制数字。如本题中的A代表数字1,Z代表数字26。
其中num的size为m

dec=num[0]×nm1+num[1]×nm2...+num[k]×nmk1+...+num[m1]×n0

=((((num[0]×n+num[1])×n+num[2])×n...)×n+num[m2])×n+num[m1]

根据上述公式,可以得到递归的方式。

0 0
原创粉丝点击