版权声明:此文章为许诗宇所写,如需转载,请写下转载文章的地址 https://blog.csdn.net/xushiyu1996818/article/details/86593161
题目及测试
package pid171;
/* Excel表列序号
给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
示例 3:
输入: "ZY"
输出: 701
致谢:
特别感谢 @ts 添加此问题并创建所有测试用例。
*/
public class main {
public static void main(String[] args) {
String[] testTable = new String[]{"A","AB","ZY","ADFE"};
for (String ito : testTable) {
test(ito);
}
}
private static void test(String ito) {
Solution solution = new Solution();
int rtn;
long begin = System.currentTimeMillis();
System.out.print("ito="+ito+" ");
System.out.println();
//开始时打印数组
rtn = solution.titleToNumber(ito);//执行程序
long end = System.currentTimeMillis();
//System.out.println(ito + ": rtn=" + rtn);
System.out.println( " rtn=" +rtn);
// for (int i = 0; i < ito.length; i++) {
// System.out.print(ito[i]+" ");
// }//打印结果几数组
System.out.println();
System.out.println("耗时:" + (end - begin) + "ms");
System.out.println("-------------------");
}
}
解法1(成功,5ms,很快)
每个字母代表的数字是now-'A'+1
每次就是sum*26+now
package pid171;
import java.math.BigInteger;
class Solution {
public int titleToNumber(String s) {
int length=s.length();
if(length==0){
return 0;
}
int sum=0;
for(int i=0;i<length;i++){
char now=s.charAt(i);
int nowInt=now-'A'+1;
sum=sum*26+nowInt;
}
return sum;
}
}