171题目:https://leetcode.com/problems/excel-sheet-column-number/?tab=Description
给定一个string,转换成数字。
类似于多进制之间的互转,但是有一点不同,这里是从1开始的,即A对应1.而一般的多进制,都会对应到0.这是一点需要注意的。
思路就是从string的右端向左端遍历,假设现在是c,然后计算出c代表的数字,然后乘以26的某一次方,再加上之前的结果。怎么理解?比如AB,那么AB就是在B的基础上加了A个26得到的结果。
代码:
public int titleToNumber(String s) {
int r = 0;
for(int i = s.length() - 1; i >= 0; i--){
char c = s.charAt(i);
r = ((int)Math.pow(26, s.length() - i - 1)) * (c - 'A' + 1) + r;
}
return r;
}
168题目:https://leetcode.com/problems/excel-sheet-column-title/?tab=Description
是上述问题的逆向过程。给定数字求string。
思路是不断取摸,然后用除法更新,继续。
取摸的结果就是最低位的值。那么这里是从1开始的,应该用26模还是27? 26!因为除数只由个数决定,而与开始位置无关。A-Z共有26个!如果是从1开始,那么就先减去1,就可以得到正确结果。因为26=Z,如果不减26&=0,如果减一就是25&=25。所以取摸运算的模与个数有关,然后根据起始位置做一个减法。处理完最低位以后处理次低位,也要先减一,然后重复即可。
代码:
public String convertToTitle(int n) {
String s ="";
while(n > 0){
s += (char)((n - 1) % 26 + 'A');
n = n / 26;
}
return s;
}
转载请注明原文地址: https://ju.6miu.com/read-38706.html