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

首頁 > 學院 > 開發設計 > 正文

Leetcode 171. Excel Sheet Column Number

2019-11-11 00:53:55
字體:
來源:轉載
供稿:網友

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

//方法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; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望城县| 青川县| 拉孜县| 南溪县| 汝阳县| 临西县| 景泰县| 北川| 邻水| 上思县| 威信县| 安远县| 舒城县| 怀化市| 桑日县| 西昌市| 胶南市| 泰和县| 城步| 禹城市| 娱乐| 固始县| 南宫市| 富宁县| 化隆| 阿城市| 卫辉市| 金塔县| 吉林省| 安丘市| 湘潭市| 衡山县| 睢宁县| 竹北市| 离岛区| 射洪县| 宜兰市| 运城市| 濮阳市| 西盟| 商南县|