很简单的一道题,输出excel中字母对应的数字。但是由于自己的程序思想还是很差,代码很长。
class Solution { public: int titleToNumber(string s) { int ans = 0; int tmp = 1; auto len = s.size(); if (len == 1) { return letterToNumber(s[0]); } for (auto i = 0; i != len; ++ i) { ans += letterToNumber(s[i]) * pow(26,(len - tmp)); tmp ++; } ans += letterToNumber(s[len - tmp]); return ans; } int letterToNumber(char p) { int ans = 0; switch(p) { case ‘A‘: ans = 1; break; case ‘B‘: ans = 2; break; case ‘C‘: ans = 3; break; case ‘D‘: ans = 4; break; case ‘E‘: ans = 5; break; case ‘F‘: ans = 6; break; case ‘G‘: ans = 7; break; case ‘H‘: ans = 8; break; case ‘I‘: ans = 9; break; case ‘J‘: ans = 10; break; case ‘K‘: ans = 11; break; case ‘L‘: ans = 12; break; case ‘M‘: ans = 13; break; case ‘N‘: ans = 14; break; case ‘O‘: ans = 15; break; case ‘P‘: ans = 16; break; case ‘Q‘: ans = 17; break; case ‘R‘: ans = 18; break; case ‘S‘: ans = 19; break; case ‘T‘: ans = 20; break; case ‘U‘: ans = 21; break; case ‘V‘: ans = 22; break; case ‘W‘: ans = 23; break; case ‘X‘: ans = 24; break; case ‘Y‘: ans = 25; break; case ‘Z‘: ans = 26; break; default: break; } return ans; } };
看了别人的代码之后,深深感觉自己的弱小。他们利用了ascii码极大的减少了switch case 的繁琐。
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; }
短短几行代码就将这个问题解决了,看来学习之路还很漫长!加油!!!!!!!
时间: 2024-10-14 12:21:53