title: 每日一練(42):Excel表序號
categories:[劍指offer]
tags:[每日一練]
date: 2022/04/14
每日一練(42):Excel表序號
給你一個字符串 columnTitle ,表示 Excel 表格中的列名稱。返回 該列名稱對應(yīng)的列序號 梢睛。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
輸入: columnTitle = "A"
輸出: 1
示例 2:
輸入: columnTitle = "AB"
輸出: 28
示例 3:
輸入: columnTitle = "ZY"
輸出: 701
提示:
1 <= columnTitle.length <= 7
columnTitle 僅由大寫英文組成
columnTitle 在范圍 ["A", "FXSHRXW"] 內(nèi)
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/excel-sheet-column-number
方法一: 進制轉(zhuǎn)換(從前到后)
思路分析
這道題要求將 Excel 表中的列名稱轉(zhuǎn)換成相對應(yīng)的列序號句各。由于 Excel 表的列名稱由大寫字母組成嘉栓,大寫字母共有 26 個梆暮,因此列名稱的
表示實質(zhì)是 26 進制科贬,需要將 26 進制轉(zhuǎn)換成十進制衷敌。
26進制轉(zhuǎn)換大莫,根據(jù)ASCII碼得到值蛉腌。
int titleToNumber(string columnTitle) {
int ans = 0;
for (char c : columnTitle) {
int k = c - 'A' + 1;
ans = ans * 26 + k;
}
return ans;
}
方法二:進制轉(zhuǎn)換(從后到前)
思路分析
26進制轉(zhuǎn)換,根據(jù)ASCII碼得到值只厘。
int titleToNumber(string columnTitle) {
int ans = 0;
long multiple = 1;
int n = columnTitle.length() - 1;
for (int i = n; i >= 0; --i) {
int k = columnTitle[i] - 'A' + 1;
ans += k * multiple;
multiple *= 26;
}
return ans;
}