Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cfa7d2c

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /