zoukankan      html  css  js  c++  java
  • 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 }
    
    


  • 相关阅读:
    数据结构之线段树
    数据结构之线段树
    数据结构之树状数组
    codevs1073 家族
    codevs1069 关押罪犯
    codevs1001 舒适的路线
    codevs1282 约瑟夫问题
    codevs1081 线段树练习 2
    codevs1225 八数码难题
    codevs1080 线段树练习
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/5848788.html
Copyright © 2011-2022 走看看