Skip to content

Commit cfa7d2c

Browse files
committed
add a package of practice
1 parent 6c7a64e commit cfa7d2c

File tree

1 file changed

+87
-0
lines changed
  • codes/java/leetcodes/src/main/java/com/hit/practice

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.hit.practice;
2+
3+
/**
4+
* 十进制数字用A~Z表示成二十六进制
5+
*/
6+
public class _1 {
7+
8+
/**
9+
* 题目:
10+
* <p>
11+
* 在Excel中,用A表示第一列,B表示第二列...Z表示第26列,AA表示第27列,AB表示第28列...依次列推。
12+
* 请写出一个函数,输入用字母表示的列号编码,输出它是第几列?
13+
* <p>
14+
* 思路:
15+
* <p>
16+
* 这道题实际上考察的是把二十六进制表示成十进制数字,将输入的字符串先转换成字符数组,遍历数组中的每一个字符,
17+
* 用这个字符减去A再加1就是该位对应的十进制数,然后乘以26的相应次方,最后把这些数加起来就是结果了。
18+
* 可能很多人会有疑惑为什么要加1,因为十进制是用0-9表示,那么二十六进制就应该用0-25表示,
19+
* 但是这里是A-Z,就相当于1-26,所以算出来的数需要加1。
20+
* <p>
21+
* 写代码之前,先补充一下ASCII码几个基本知识点:
22+
* <p>
23+
* 0:48
24+
* A:65
25+
* a:97
26+
* <p>
27+
* 规律:
28+
* <p>
29+
* 数字在前,大写字母其后,最后是小写字母,小写字母与大写字母差32。
30+
* 上边给出了字符'0'、'A'、'a'相对应的整型数,其余的字符按照顺序都可以算出来。
31+
*
32+
* @param str 列编码
33+
* @return 行数
34+
*/
35+
private int excelColumn2Number(String str) {
36+
// 判空
37+
if (str == null || "".equals(str)) {
38+
return -1;
39+
}
40+
// 将字符串转换为字符数组
41+
char[] strArr = str.toCharArray();
42+
// 指数
43+
int exp = 0;
44+
// 行数
45+
int col = 0;
46+
for (int i = strArr.length - 1; i >= 0; i--) {
47+
col += (strArr[i] - 'A' + 1) * Math.pow(26, exp);
48+
exp++;
49+
}
50+
return col;
51+
}
52+
53+
/**
54+
* 题目:
55+
* <p>
56+
* 在Excel中,用A表示第一列,B表示第二列...Z表示第26列,AA表示第27列,AB表示第28列...依次列推。
57+
* 请写出一个函数,输入一个数表示第几列,输出用字母表示的列号编码?
58+
* <p>
59+
* 思路:
60+
* <p>
61+
* 这道题思路和上道题完全相反,考察的是把十进制进制数字表示成二十六进制,
62+
* 用输入的数字col模26得到temp,temp即为二十六进制数字的最后一位,
63+
* 用temp + 'A' - 1即可得到所对应的A~Z中的字母;接着用输入的数字col除以26,
64+
* 用这个结果继续寻找倒数第二位所对应的字符,直到col为0。
65+
* 但是,temp=0的时候比较特殊,比如输入的数字col=26,col%26=0,本来应该输出Z,
66+
* 结果输出的是@,所以把temp=0的情况单独拿出来判断一下,当temp=0时,置temp=26,
67+
* 然后将col-1,这时输入26将会得到正确答案Z。
68+
* 最后注意,刚才输出的结果都是从最后一位开始的,
69+
* 利用StringBuilder的reverse()方法将刚才得到的结果反转,返回就OK了。
70+
*
71+
* @param col 行数
72+
* @return 列编码
73+
*/
74+
public String excelColumn2String(int col) {
75+
StringBuilder builder = new StringBuilder();
76+
while (col != 0) {
77+
int temp = col % 26;
78+
col = col / 26;
79+
if (temp == 0) {
80+
temp = 26;
81+
col = col - 1;
82+
}
83+
builder.append((char) ('A' + temp - 1));
84+
}
85+
return builder.reverse().toString();
86+
}
87+
}

0 commit comments

Comments
 (0)