Problem:
Given a column title as appear in an Excel sheet, return its corresponding column number.
For example:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28
Idea: It is like a conversion of number based on 26 to number based on 10.
My code:
public class Solution {
public int titleToNumber(String s) {
int result = 0;
int power = 0;
for (int i = s.length() - 1; i >= 0; i--) {
int num = charToInt(s.charAt(i));
result = result + caculate(num,power);
power++;
}
return result;
}
public int charToInt(char c) {
int result = 0;
switch (c) {
case 'A':
result = 1;
break;
case 'B':
result = 2;
break;
case 'C':
result = 3;
break;
case 'D':
result = 4;
break;
case 'E':
result = 5;
break;
case 'F':
result = 6;
break;
case 'G':
result = 7;
break;
case 'H':
result = 8;
break;
case 'I':
result = 9;
break;
case 'J':
result = 10;
break;
case 'K':
result = 11;
break;
case 'L':
result = 12;
break;
case 'M':
result = 13;
break;
case 'N':
result = 14;
break;
case 'O':
result = 15;
break;
case 'P':
result = 16;
break;
case 'Q':
result = 17;
break;
case 'R':
result = 18;
break;
case 'S':
result = 19;
break;
case 'T':
result = 20;
break;
case 'U':
result = 21;
break;
case 'V':
result = 22;
break;
case 'W':
result = 23;
break;
case 'X':
result = 24;
break;
case 'Y':
result = 25;
break;
case 'Z':
result = 26;
break;
}
return result;
}
public int caculate (int num, int power) {
int base = 1;
while (power >= 1) {
base = base * 26;
power--;
}
return num * base;
}
}
Other's code that is better and cleaner:
int result = 0;
for (int i = 0; i < s.length(); result = result * 26 + (s.charAt(i) - 'A' + 1), i++);
return result;