Leetcode 168. Excel Sheet Column Title

Posted 琴影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 168: Excel Sheet Column Title

LeetCode 168. Excel Sheet Column Title

LeetCode 168. Excel Sheet Column Title

[leetcode-168-Excel Sheet Column Title]

LeetCode168. Excel Sheet Column Title

Leetcode 168. Excel Sheet Column Title