Given a string columnTitle that represents the column title as appears in an Excel sheet, return its corresponding column number.
給予一個字串 columnTitle,然後它代表欄位的名稱出現在excel表中。回傳對應的欄位數值。
Example 1:
Input: columnTitle = "A" Output: 1
Example 2:
Input: columnTitle = "AB" Output: 28
Example 3:
Input: columnTitle = "ZY" Output: 701
solution:
1. 宣告 sum 作為數值計算的變數,以及 EXP 作為數值的次方。
2. 透過用字串位數來進行迴圈。
3. 運用 charCodeAt() 來對 columnTitle 的單一字串進行數值轉換。
依據 ANSI CODE 的轉換,如下: A = 65, B = 66, C = 67 ... X = 88 Y = 89 Z = 90
4. 最後透過 EXP 與「sum += 」來完成數值加總。
A = (65 - 64) * (26 ** 0) //1 * 1 = 1 "A" A = (65 - 64) * (26 ** 1) //1 * 26 = 26 A "A" = (65 - 64) * (26 ** 0) //1 * 1 = 1 => 26 + 1 = 27
Code 1:
var titleToNumber = function(columnTitle) { let sum = 0; for (let i = 0; i < columnTitle.length; i++) { let EXP = columnTitle.length - 1 - i; sum += (columnTitle[i].charCodeAt(0) - 64) * (26 ** EXP); } return sum; };
FlowChart:
Example 1
Input: columnTitle = "A" EXP = 26 ** 0 A = (65 - 64) * (26 ** 0) //1 * 1 = 1
Example 2
Input: columnTitle = "AB" EXP = (i = 0) * 26 ** 1 + (i = 1) * 26 * 0 "A" B = (65 - 64) * (26 ** 1) //1 * 26 = 26 A "B" = (66 - 64) * (26 ** 0) //2 * 1 = 2 => 26 + 2 = 28
Example 3
Input: columnTitle = "ZY" EXP = (i = 0) * 26 ** 1 + (i = 1) * 26 * 0 "Z" Y = (90 - 64) * (26 ** 1) //26 * 26 = 676 Z "Y" = (89 - 64) * (26 ** 0) //25 * 1 = 25 => 676 + 25 = 701
charCodeAt()
"ABC".charCodeAt(0) // returns 65:"A" "ABC".charCodeAt(1) // returns 66:"B" "ABC".charCodeAt(2) // returns 67:"C" "ABC".charCodeAt(3) // returns NaN