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
...
Example 1:
Input: 1
Output: "A"
Example 2:
Input: 28
Output: "AB"
Example 3:
Input: 701
Output: "ZY"
方法1:
这道题也要好好体会,string的典型。每一次先求出modulo,对modulo==0的情况需要特殊处理。这是为什么呢?因为int m = n % 26, 对于m != 0 来讲,可以当作相对于A
的位移char c = ‘A’ + m - 1;但是Z
位移26,永远会return 0, 但是A
- 1不是Z
。所以这种情况我们要把Z
手动放进结果,并且将n-=26, 否则的话只要有Z出现最后永远会多一个1也就是A
在我们的结果里。之后就是uniform的求整除26的结果,进入下一循环。直到n == 0 退出;
易错点
- char c = ‘A’ + m - 1:需要特判
Z
的情况,这一点出现很多次 - n-=26:经过观察如果不处理,'Z’的下一步都会位移一位,有的时候就多出来一个
A
,这是因为取完当前数之后已经输出,要从n里面减掉,而这个操作在n = 1…25时自动被%完成了。
如果为了加深记忆可以把n-=m在两部分都明白的写出来。
class Solution {
public:
string convertToTitle(int n) {
string result = "";
while (n > 0){
int m = n % 26;
char c;
if (m == 0) {
c = 'Z';
// 这一步很重要,为什么呢
n -= 26;
}
else {
c = m + 'A' - 1;
n -= m;
}
result += c;
n /= 26;
}
reverse(result.begin(), result.end());
return result;
}
};
// n = 700
// m = 24
// c = X
// n = 26
// m = 0
// c = Z
// n = 1