Problem
Given a positive integer, return its corresponding column title as appear in an Excel sheet.
Example
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
Algorithm
整理一下题意:给定一个正整数,要求返回其在Excel中代表的列号。
此题与LeetCode #171 - Excel Sheet Column Number - Easy是共轭题目。
注意到整数每隔26个则循环一次,相当于以A,B,C,…,Z表示的一种26进制。
但是与普通26进制不同之处在于,这种列号表示法在进位的情况下,没有表示“0”的符号。只有一位符号时是A,B,C,…,Z,但是进位以后直接从AA开始,但是A并不表示“0”,而是表示“1”。于是需要特别处理这一情况。具体方法是,当列号进位时,即尾数’Z’->’AA’时,令整数n减一。
注意表达式c=((n%26)-1+26)%26+’A’;中,((n%26)-1+26)是使n的余数减一,但是为了取模正确需要令括号内结果为正,所以再加上26。由于模式26,所以加上26不影响取模结果。
代码如下。
class Solution {
public:
string convertToTitle(int n) {
string s,t;
char c;
while(n){
c=((n%26)-1+26)%26+'A';
s+=c;
n=n/26;
if(c=='Z') n--;
}
for(int i=0;i<s.size();i++) t+=s[s.size()-1-i];
return t;
}
};