一、需求
给你一个整数 columnNumber
,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入:columnNumber = 1
输出:"A"
示例 2:
输入:columnNumber = 28
输出:"AB"
示例 3:
输入:columnNumber = 701
输出:"ZY"
示例 4:
输入:columnNumber = 2147483647
输出:"FXSHRXW"
提示:
1 <= columnNumber <= 231 - 1
二、思路分析图
三、代码
(一)数据初始化
/**
* 入口
* 168、Excel表列名称
* 输入:
* columnNumber = 28
* 输出:
* "AB"
* 解释:
* 1.while循环方案
*/
@Test
public void suanfa36()
{
// 初始化
int columnNumber = 28;
// 打印
// while循环方案
String result = this.convertToTitle(columnNumber);
System.out.println("result = " + result);
// 我自己写的方案
String myMode = this.convertToTitleMap(columnNumber);
System.out.println("myMode = " + myMode);
}
(二)while循环方案
/**
* while循环方案
*
* @param columnNumber
* @return
*/
public String convertToTitle(int columnNumber)
{
StringBuffer sb = new StringBuffer();
while (columnNumber > 0)
{
// 防止26 / 26 = 0 的情况,0-A ~ 25-Z
columnNumber--;
// ASCII码表转换
sb.append((char) (columnNumber % 26 + 'A'));
// 获取一层去掉一层
columnNumber /= 26;
}
// 因为是从个位数开始获取的,所以最后要旋转下位置
return sb.reverse().toString();
}
(三)我写的初始方案
/**
* 我自己写的方案
*
* @param columnNumber
* @return
*/
public String convertToTitleMap(int columnNumber)
{
HashMap<Integer, Character> map = new HashMap<>();
for (int i = 0; i < 26; i++)
{
map.put(i,(char)('A' + i));
}
StringBuffer sb = new StringBuffer();
while (columnNumber > 0)
{
// 防止26 / 26 = 0 的情况,0-A ~ 25-Z
columnNumber--;
// ASCII码表转换
sb.append(map.get(columnNumber % 26));
// 获取一层去掉一层
columnNumber /= 26;
}
// 因为是从个位数开始获取的,所以最后要旋转下位置
return sb.reverse().toString();
}
(四)结果图
作者:王子威
四、总结
- 学习了Excel表列名称
- columnNumber–是真没想到,一直报错,后面时先判断如果为0就直接=26了
- 开始想到的时和罗马数字转整数算法了,就先声明map了
- 算法兴趣+1 总:36
- 加强了对算法的分析能力