题干分析:
根据题目中所给的信息可知这是考察Excel表格中用字母实现计数的编程实现问题,首先根据26个字母A~Z来分别计数1~26,然后在这个计数的基础上在通过增加A~Z重复的数量来进行计数的叠加.
解题分析:
AA可以看成1(前面的A)*26+1(后面的A),28(AB)=1(A)*26+2(B),以此类推,ZZ就应该代表着26(Z)*26+26(Z),而AAA即为1(第一个A)*26*26+1(第二个A)*26+1(第三个A),可以发现这有点类似于我们的10进制计数,只是这边换成了26进制。
弄清楚计数了原理之后就开始分析怎么可以利用代码来进行实现啦~首先我们应该是可以识别所给字符串的每一个字符,这样才能方便将其转化为数字,也可以方便的知道它是在哪个位上。所以我们第一步可以将其从字符串String转化为char[],使用java中的toCharArray()函数;第二步利用java中的ASCII码表将字符转化为数字;第三步,利用它的位置来乘以26的相应次数,从而得到该位所代表的数字。由于需要对所转化的数组的每一位都要进行字母-->数字的转化,所以可以写在一个for循环中完成,又每次只能对其中的一位进行转化,但每次转化之后的数字应该记录下来并和下一位转化后的数字进行叠加,所以可以使用sum+=的办法。
问题解决:
publicclass Solution {
public int titleToNumber(String s) {
char a[]=s.toCharArray();
int sum=0;
for(int i=0;i<a.length;i++){
sum=(int) (((int)a[i]-64)*Math.pow(26,a.length-i-1)+sum);
}
return sum;
}
}
本题总结:
以后若遇到将一个字符串转化为一个数字的问题,可以有以下解决方案:首先利用toCharArray()函数将字符串转化为字符数组,然后利用ASCII表将其每一位分别转化为数字,最后将每一位转化后的数字进行相加。
java中String和char的区别:
1.类型不同,char是字符类型,String是字符串类型;
2.String字符串是用“”来包含串的,char是用‘’来包含单字节的;
3.String内部用来存储的结果是一个char字符数组;
4.String是对象,char是基本数据类型(int, short, byte,long, char, boolean, double, float)。
String和char之间的相互转化:
String---->char:toCharArray()
char---->String:String.valueOf(char[]data)