題目描述:
值得注意的是:十進制是0 1 2 3 4 5 6 7 8 9;二進制是0 1 。
而題中1對應A,2對應B…26對應Z,是從1開始的,而不是0。是以要進行減一操作。
主要是1-26是單個字母,27-+~是多個字母(至少兩個,而且是從AA開始),代碼二我是以這個為突破點,試了兩遍才寫對,第一遍是ZY這個點沒處理好,輸出AnullY,是進位問題。
代碼二是用HashMap做,代碼一是ASCII碼。
PS:自我感覺HashMap更好了解題意
代碼一:
class Solution {
public String convertToTitle(int n) {
StringBuilder sb = new StringBuilder();
while(n>0){
n--;
sb.append((char) ('A' + n % 26));
n = n / 26;
}
return sb.reverse().toString();
}
}
結果:
代碼二(HashMap):
class Solution {
public String convertToTitle(int n) {
HashMap<Integer,Character> map = new HashMap<Integer,Character>();
int c = 0;
for(char i = 'A';i <= 'Z';i++){
map.put(c++,i);
}
StringBuilder sb = new StringBuilder();
if(n <= 26){
sb.append(map.get(n-1));
}else{
while(n>0){
n--;
sb.append(map.get(n % 26));
n = n / 26;
}
}
return sb.reverse().toString();
}
}
結果: