首页 > 代码库 > Leetcode 168. Excel Sheet Column Title
Leetcode 168. Excel Sheet Column Title
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
思路:
1 = 1 * 26 ^ 0 -> A
...
26 = 26 * 26 ^ 0 -> Z
27 = 1 * 26 ^ 1 + 1 * 26 ^ 0 -> AA
28 = 1 * 26 ^ 1 + 2 * 26 ^ 0 -> AB
...
可以发现1对应‘A‘ , 2对应‘B‘,比如我们怎么得到AB呢?首先我们对n % 26,那么由数论知识,已知就得到2了,这个2就可以得到‘B‘,接下来n = n / 26, 即 28 / 26 = 1 * 26 ^ 0 + 0,直到n <= 0.显然我们很容易得到了这个1,也就得到了‘A‘,将连接起来的字符串反转,也就是"AB"了。
注意:26怎么处理呢?以及52又怎么办呢?那么这里我们只需要另外加个条件就行了:if(n % 26 == 0) 0对应的是‘Z‘.并且要n = n - 26,再进行后面 n = n / 26的处理。
比如 52 = 1 * 26 ^1 + 26 * 26 ^ 0,52对应的是AZ。首先52 % 26 = (1 * 26 ^ 1 + 26 * 26 ^ 0) % 26 = 0,所以我们输出一个‘Z‘,如果不进行n = n - 26,去除掉最低位的个位数,那么 52 / 26 = (1 * 26 ^ 0 + 1 * 26 ^ 0) = 2 * 26 ^ 0,那么得到的就是2即‘B‘了,出错。
1 class Solution { 2 public: 3 string convertToTitle(int n) { 4 string s = ""; 5 char c; 6 while(n >= 1){ 7 if(n % 26 == 0){ 8 n -= 26; 9 c = ‘Z‘;10 }11 else 12 c = ‘A‘ + (n % 26 - 1);13 s += c;14 n = n / 26;15 }16 reverse(s.begin(), s.end());17 return s;18 }19 };
也可以用递归的:
1 #include <iostream> 2 using namespace std; 3 void convertToTitle(int n){ 4 if(n <= 0) 5 return; 6 if(n % 26 == 0) 7 n = n - 26; 8 convertToTitle(n / 26); 9 if(n % 26 == 0){10 cout << ‘Z‘;11 } else {12 cout << (char)(‘A‘ + (n % 26) - 1);13 }14 }15 16 int main(){17 int n;18 while(cin >> n){19 convertToTitle(n);20 cout << endl;21 }22 return 0;23 }
Leetcode 168. Excel Sheet Column Title
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。