国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Leetcode 171. Excel Sheet Column Number

2019-11-10 22:44:41
字體:
來源:轉載
供稿:網友

Related to question Excel Sheet Column Title

Given a column title as appear in an Excel sheet, return its corresponding column number.

For example:

A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28

s思路: 1. 逆向題。例如:ABC=(C-‘A’+1)*1+(B-‘A’+1)*26+(A-‘A’+1)*26*26,從低位到高位,每次把字母轉換成數字后,乘以該數位的權重,權重在低位為1,從右往左每次權重也乘以26。這也是為什么從低位向高位遍歷的原因,低位的權重已知,高位的權重再沒訪問之前是不知道的。 2. 再次說明,搞清問題的邊界的具體位置,也就搞清了答案。或者形象的說,答案在問題的背后,但是沒搞清楚問題的邊界,那么問題在頭腦里就是一團漿糊,顯得沒有邊界,沒有邊界給人的感覺就是邊界無窮大,當然從自己的角度看過去這個問題就大得遮住了答案,看不到一點答案的樣子;但是一旦學會了去定義問題的界限,發(fā)現問題方方面面的邊沿,問題就逐漸從“無窮大”縮減到這個問題實際的大小,那么答案就在他的背后,可以看得清清楚楚。當然,值得強調的是,實際上問題本身沒有什么變化,不會變小,而是自己看問題的感受發(fā)生變化。比如,這道題低位的權重是1,這就是一個邊界,而且是已知的,而高位的邊界雖然可以獲得,但是并不是已知! 3. 上面說從低位開始遍歷,因為邊界清晰,所以好理解。但這并不妨礙從另一個角度來考慮問題,如果把這個轉換的過程建模成一下的方式:ABC={(A-‘A’+1)*26+(B-‘A’+1)}*26+(C-‘A’+1)。看起來又是數學技巧,但是這里面展現的數學之美讓人動容。你看,我們通過提取公因數,就可以從左邊遍歷至右邊。每次把當前的結果乘以26,然后加上當前位的數,由于每次的中間結果都乘以26,所以,最高位就乘了n-1次26,因此這是正確的操作! 4. 再說一下兩者數學的不同:前者是乘數和被乘數相互獨立,權重每次自己相乘26即可,簡單干練,邏輯清楚,因為就是一個線性的思路;后者則是把整個中間結果乘以26,關鍵是這個結構是一種自重復的結構,即:公式內部的一部分長得和公式自己一樣,有點分形圖案的味道,天然用iterative實現。 5. 再分析,從左往右運算的方法:由于先把計算最重要,權重最高的位置,所以更穩(wěn)定;從右往左的方法,則穩(wěn)定性差。所謂穩(wěn)定性,就是如果計算從中間停止,所計算的結果和最后結果之間的差值大小。

//方法1:從低位向高位遍歷class Solution {public: int titleToNumber(string s) { // int res=0,w=1; for(int i=s.size()-1;i>=0;i--){ res+=(s[i]-'A'+1)*w; w*=26; } return res; }};//方法2:從高低位向低位遍歷class Solution {public: int titleToNumber(string s) { // int res=0; for(int i=0;i<s.size();i++){ res=res*26+(s[i]-'A'+1); } return res; }};
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳曲县| 河津市| 崇文区| 景东| 益阳市| 句容市| 黎川县| 丹东市| 蕲春县| 新河县| 二手房| 清原| 潞城市| 九龙城区| 高安市| 汤原县| 略阳县| 沂源县| 宝坻区| 辰溪县| 潮安县| 东阿县| 金平| 东山县| 海丰县| 靖州| 河东区| 峨山| 城固县| 修水县| 沈丘县| 宽甸| 谷城县| 翁源县| 信阳市| 新乡县| 澳门| 安国市| 无为县| 昂仁县| 团风县|