LeetCode演算法題-Excel Sheet Column Number(Java實現)
這是悅樂書的第182 次更新,第184 篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第41題(順位題號是171)。給定Excel工作表中顯示的列標題,返回其對應的列號。例如:
A - > 1
B - > 2
C - > 3
Z - > 26
AA - > 27
AB - > 28
輸入:“A”
輸出:1
輸入:“AB”
產量:28
輸入:“ZY”
輸出:701
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
這和前天的題目根據數字輸出字串列名類似,不過今天這道題是反過來的,根據列名字串輸出代表的數字。
既然是反過來,那麼此處就應該是要用乘法了,並且我們也可以觀察幾組資料得到大致的演算法。
"AA"表示數字28,可以看做26x1+1
"AAA"表示數字703,可以看做26x(26+1)+1
"AAAA"表示數字18279,可以看做 26x(26x(26+1)+1)+1
每次迴圈時,新的sum等於上一次迴圈的sum乘以26加上當前迴圈字元所表示的數字。
特殊情況:當字串為空或者去掉空格後的長度等於0時,直接返回0。
public int titleToNumber(String s) { int sum = 0; if (s.isEmpty() || s.trim().length() == 0) { return 0; } int len = s.length()-1; for (int i=0; i<=len; i++) { sum = (s.charAt(i)-'A' + 1) + sum*26; } return sum; }
03 第二種解法
我們同樣以上面的三個字串舉例。
"AA"表示數字28,可以看做1乘以26的一次方加上1乘以26的0次方。
"AAA"表示數字703,可以看做1乘以26的2次方加上1乘以26的1次方再加上1乘以26的0次方。
"AAAA"表示數字18279,可以看做1乘以26的3次方加上1乘以26的2次方再加上1乘以26的1次方再加上1乘以26的0次方。
這種就類似二進位制數轉十進位制數一樣,變成了26進位制數轉十進位制數。
特殊情況:當字串為空或者去掉空格後的長度等於0時,直接返回0。
public int titleToNumber2(String s) { int res = 0; if (s.isEmpty() || s.trim().length() == 0) { return 0; } int col = s.length() - 1; for (int i = 0; i < s.length(); i++) { res += (s.charAt(i) - 64) * Math.pow(26, col--); } return res; }
Math.pow(x,y)方法可返回 x 的 y 次冪的值。
04 小結
演算法專題目前已連續日更超過一個月,演算法題文章41 +篇,公眾號對話方塊回覆【資料結構與演算法 】、【演算法 】、【資料結構 】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!