一、需求
给你一个字符串 columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
例如:
A -> 1
B -> 2
C -> 3
…
Z -> 26
AA -> 27
AB -> 28
…
示例 1:
输入: columnTitle = “A”
输出: 1
示例 2:
输入: columnTitle = “AB”
输出: 28
示例3:
输入: columnTitle = “ZY”
输出: 701
示例4:
输入: columnTitle = “ABC”
输出: 731
提示:
1 <= columnTitle.length <= 7
columnTitle
仅由大写英文组成columnTitle
在范围["A", "FXSHRXW"]
内
二、思路分析图
(一)循环方案【O(n)方案】
三、代码
(一)数据初始化
/**
* 入口
* 171、Excel 表列序号
* 输入:
* columnTitle = "ABC"
* 输出:
* result1 = 731
* 解释:
* 1.递归方案
* 2.O(n)方案
*/
@Test
public void suanfa39()
{
// 初始化
String columnTitle = "ABC";
// 打印
// 循环方案【O(n)方案】
int result1 = this.forTitleToNumber(columnTitle);
System.out.println("result1 = " + result1);
}
(二) 循环方案【O(n)方案】
/**
* 循环方案【O(n)方案】
*
* @param columnTitle
* @return
*/
public int forTitleToNumber(String columnTitle)
{
int sum = 0;
for (int i = 0; i < columnTitle.length(); i++)
{
sum += Math.pow(26, i) * (columnTitle.charAt(columnTitle.length() - 1 - i) - 64);
}
return sum;
}
(三)结果图
作者:王子威
四、总结
- 学习了Excel 表列序号算法
- 这个应该是168的另一种版本,思路相反,因为有了经验,这个就参考了168的思路逆向写的
- 算法兴趣+1 总:39
- 加强了对算法的分析能力