一、大意:
这个问题很简单,就是把一个数字的每个字符分离开来。
二、问题变形:
1,逆操作:知道每个字符和位置,求这个数
2,leetcode171:给定一个像Excel表格里显示的列标题,返回对应的列号。
3,leetcode168:是2的逆操作,将数字转成字母形式。这两道题目只是把10进制换成了26进制。
三,对于问题2的两种解:
字符串形式:“AAAA”
1,正向思维:从字符串的最末尾开始计算,s.charAt(s.length() -i-1) - ‘A’ + 1
public static int titleToNumber(String s) {
int sum = 0;
for(int i=0;i<s.length();i++) {
sum += (s.charAt(s.length() -i-1) - 'A' + 1)*Math.pow(26, i);
}
return sum;
}
2,反向思维:从字符串的第一位开始计算,s.charAt(i) - ‘A’ +1
public static int titleToNumber2(String s) {
int sum = 0;
int tem = 0;
for(int i=0;i<s.length();i++) {
tem = s.charAt(i) - 'A' +1;
sum = sum * 26 + tem;
}
return sum;
}
四、对于问题3的解
class Solution(object):
def convertToTitle(self, n):
"""
:type n: int
:rtype: str
"""
s = ""
while n != 0:
s = chr((n-1)%26 + ord('A')) + s
n = (n-1)/26
return s