leetcode刷題筆記 Excel列表名稱

2022-05-07 10:18:09 字數 906 閱讀 3086

給定乙個正整數,返回它在 excel 表中相對應的列名稱

如:1:a

2:b28:ab

701:zy

這道題在leetcode上標註的是簡單,所以我本以為它是青銅,完了沒想到是個王者。研究了乙個上午腦袋都打結了,還是沒想明白。看了別人的題解中午睡覺的時候還在尋思,總算是懂得七七八八了。我把**搬過來,說一下自己的理解(搬的哪位老哥的侵權了的話說一聲哈)

public string converttotitle1(int

n)

return

temp;

}

一開始以為是一道簡單的10進製轉換為26進製的問題,然後碰了幾次壁之後發現事情沒有這麼簡單。

注意**中標註的這兩個 n-1。

先看第乙個n-1,十進位制數字1~26對應的是字母a~z,因此當以a為基點時,數字n=1~26時分別在其上加0-25變成a~z,因此應該在十進位制數的基礎上減1再取模。但是也不能寫成 char s = (char)(n%26+'a'-1),因為這樣寫的話,當n被26整除時,本來應該為 『z』,而這樣計算得出的會是 『a』-1='@'.

至於第二個 n-1,不知道你們有沒有注意到這個excel序列和10進製的區別。十進位制的個位取滿是比十位少1的,就是說個位取滿是9,十位為1時代表的是10。而這個excel序列可以出現az,a代表乙個26,z也代表乙個26,這就很迷了對不對,它這裡是滿27再進製,但是進的位卻代表26。因此為了防止26的倍數,比如說52變成bz,因為在最末尾已經消耗了乙個26,只需要進乙個26到前一位。因此第二個 n-1 就是防止這種情況的發生。

其實我覺得歸根結底,這道題很迷的原因是它不符合我們的思維慣性。我們的十進位制、二進位制、十六進製制等等每一位都是有0的,而這個excel序列是不存在0的,只有1-26,並且它是滿27(而非它的進製26)才向前進一位。

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...

LeetCode刷題筆記

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...