算法練習(xí)四

7. 反轉(zhuǎn)整數(shù)

給定一個(gè) 32 位有符號(hào)整數(shù)厨喂,將整數(shù)中的數(shù)字進(jìn)行反轉(zhuǎn)。

示例 1:

輸入: 123
輸出: 321
示例 2:

輸入: -123
輸出: -321
示例 3:

輸入: 120
輸出: 21
注意:

假設(shè)我們的環(huán)境只能存儲(chǔ) 32 位有符號(hào)整數(shù),其數(shù)值范圍是 [?231, 231 ? 1]毡泻。根據(jù)這個(gè)假設(shè)刘离,如果反轉(zhuǎn)后的整數(shù)溢出,則返回 0抑片。

常規(guī)思路解題卵佛,求余數(shù),需要注意的是溢出判斷敞斋。

class Solution {
public:
    int reverse(int x) {
        int t = 0;
        while (x != 0)
        {
            //溢出判斷
            if (t >INT_MAX / 10 || t <(INT_MIN) / 10)
                return 0;
            t= t * 10 + x % 10;
            x /= 10;
        }
 
        return t;
    }
};

8. 字符串轉(zhuǎn)整數(shù) (atoi)

實(shí)現(xiàn) atoi截汪,將字符串轉(zhuǎn)為整數(shù)。

在找到第一個(gè)非空字符之前植捎,需要移除掉字符串中的空格字符衙解。如果第一個(gè)非空字符是正號(hào)或負(fù)號(hào),選取該符號(hào)焰枢,并將其與后面盡可能多的連續(xù)的數(shù)字組合起來(lái)蚓峦,這部分字符即為整數(shù)的值。如果第一個(gè)非空字符是數(shù)字济锄,則直接將其與之后連續(xù)的數(shù)字字符組合起來(lái)暑椰,形成整數(shù)。

字符串可以在形成整數(shù)的字符后面包括多余的字符荐绝,這些字符可以被忽略一汽,它們對(duì)于函數(shù)沒(méi)有影響。

當(dāng)字符串中的第一個(gè)非空字符序列不是個(gè)有效的整數(shù)低滩;或字符串為空召夹;或字符串僅包含空白字符時(shí),則不進(jìn)行轉(zhuǎn)換恕沫。

若函數(shù)不能執(zhí)行有效的轉(zhuǎn)換监憎,返回 0。

說(shuō)明:

假設(shè)我們的環(huán)境只能存儲(chǔ) 32 位有符號(hào)整數(shù)昏兆,其數(shù)值范圍是 [?231, 231 ? 1]枫虏。如果數(shù)值超過(guò)可表示的范圍妇穴,則返回 INT_MAX (231 ? 1) 或 INT_MIN (?231) 。

示例 1:

輸入: "42"
輸出: 42
示例 2:

輸入: " -42"
輸出: -42
解釋: 第一個(gè)非空白字符為 '-', 它是一個(gè)負(fù)號(hào)隶债。
我們盡可能將負(fù)號(hào)與后面所有連續(xù)出現(xiàn)的數(shù)字組合起來(lái)腾它,最后得到 -42 。
示例 3:

輸入: "4193 with words"
輸出: 4193
解釋: 轉(zhuǎn)換截止于數(shù)字 '3' 死讹,因?yàn)樗南乱粋€(gè)字符不為數(shù)字瞒滴。
示例 4:

輸入: "words and 987"
輸出: 0
解釋: 第一個(gè)非空字符是 'w', 但它不是數(shù)字或正、負(fù)號(hào)赞警。
因此無(wú)法執(zhí)行有效的轉(zhuǎn)換妓忍。
示例 5:

輸入: "-91283472332"
輸出: -2147483648
解釋: 數(shù)字 "-91283472332" 超過(guò) 32 位有符號(hào)整數(shù)范圍。
因此返回 INT_MIN (?231) 愧旦。

其實(shí)就是atoi的函數(shù)實(shí)現(xiàn)世剖,依然較為簡(jiǎn)單,依次判斷所有條件即可笤虫∨蕴保空格,正負(fù)號(hào)琼蚯,溢出酬凳,是否為數(shù)字

class Solution {
public:
    int myAtoi(string str) {
        if (str.empty()) {
            return 0;
        }
        
        int sign = 1, base = 0, i = 0,n = str.size();
        while (i < n && str[i] == ' ') {
            I++;
        }
        
        if (str[i] == '+' || str[i] == '-') {
            sign = (str[i] == '+') ? 1: -1;
            I++;
        }
        
        while (i <n && str[i] >= '0' && str[i] <= '9') {
            if (base > INT_MAX/10 || (base == INT_MAX/10 && str[i] - '0' >7)) {
                return (sign ==1) ? INT_MAX : INT_MIN;
            }
            base = 10 * base + (str[i] - '0');
            I++;
        }
        return sign *base;
        
    }
};

62. 不同路徑

一個(gè)機(jī)器人位于一個(gè) *m x n *網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為“Start” )。

機(jī)器人每次只能向下或者向右移動(dòng)一步遭庶。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為“Finish”)宁仔。

問(wèn)總共有多少條不同的路徑?

<small style="box-sizing: border-box; font-size: 12px;">例如峦睡,上圖是一個(gè)7 x 3 的網(wǎng)格翎苫。有多少可能的路徑?</small>

說(shuō)明:m 和 *n *的值均不超過(guò) 100赐俗。

示例 1:

輸入: m = 3, n = 2
輸出: 3
解釋:
從左上角開(kāi)始拉队,總共有 3 條路徑可以到達(dá)右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

示例 2:

輸入: m = 7, n = 3
輸出: 28

除了DFS和BFS搜索算法阻逮,這題其實(shí)典型的動(dòng)態(tài)規(guī)劃粱快。我們可以假設(shè)dp[i][j]的值就是第i行,j列的路徑數(shù)叔扼,很明顯i = 0.的所有值都是1事哭,j = 0的所有值都為1,只有一條路徑瓜富。而除此之外dp[i][j] = dp[i-1][j] + dp[i][j-1];時(shí)間復(fù)雜度O(nm),空間復(fù)雜度O(nm)

class Solution {
public:
    int uniquePaths(int m, int n) {
        int dp[m][n];
        for (int i = 0; i<m; i++) {
            for (int j = 0; j <n; j++) {
                if (i == 0 || j == 0) {
                    //只有一種
                    dp[i][j] = 1;
                }
                else{
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
            }
        }
        
        return dp[m-1][n-1];
    }
};

19. 刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)

給定一個(gè)鏈表鳍咱,刪除鏈表的倒數(shù)第 n 個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)与柑。

示例:

給定一個(gè)鏈表: 1->2->3->4->5, 和 n = 2.

當(dāng)刪除了倒數(shù)第二個(gè)節(jié)點(diǎn)后谤辜,鏈表變?yōu)?1->2->3->5.
說(shuō)明:

給定的 n 保證是有效的蓄坏。

進(jìn)階:

你能嘗試使用一趟掃描實(shí)現(xiàn)嗎?

思路一趟掃描丑念,使用雙指針涡戳,可以指定兩個(gè)相差n的節(jié)點(diǎn)指針遍歷鏈表,這樣前面的指針遍歷到鏈表尾部的時(shí)候脯倚,后面的指針正好在倒數(shù)第n+1個(gè)節(jié)點(diǎn)的位置,刪除節(jié)點(diǎn)只需要改變next指向即可渔彰。代碼并不復(fù)雜。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        struct ListNode *headCache = new ListNode(0);
        headCache->next = head;
        ListNode *end = headCache;
        for (int i = 0; i <n; i++) {
            head = head->next;
        }
        
        while (head != NULL) {
            head = head->next;
            end = end->next;
        }
        //刪除結(jié)點(diǎn)
        end->next = end->next->next;
        
        return headCache->next;
    }
    
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末推正,一起剝皮案震驚了整個(gè)濱河市恍涂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌植榕,老刑警劉巖再沧,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異内贮,居然都是意外死亡产园,警方通過(guò)查閱死者的電腦和手機(jī)汞斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門夜郁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人粘勒,你說(shuō)我怎么就攤上這事竞端。” “怎么了庙睡?”我有些...
    開(kāi)封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵事富,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我乘陪,道長(zhǎng)统台,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任啡邑,我火速辦了婚禮贱勃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谤逼。我一直安慰自己贵扰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布流部。 她就那樣靜靜地躺著戚绕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枝冀。 梳的紋絲不亂的頭發(fā)上舞丛,一...
    開(kāi)封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天耘子,我揣著相機(jī)與錄音,去河邊找鬼球切。 笑死拴还,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欧聘。 我是一名探鬼主播片林,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怀骤!你這毒婦竟也來(lái)了费封?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒋伦,失蹤者是張志新(化名)和其女友劉穎弓摘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體痕届,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韧献,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了研叫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锤窑。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚷炉,靈堂內(nèi)的尸體忽然破棺而出渊啰,到底是詐尸還是另有隱情,我是刑警寧澤申屹,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布绘证,位于F島的核電站,受9級(jí)特大地震影響哗讥,放射性物質(zhì)發(fā)生泄漏嚷那。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一杆煞、第九天 我趴在偏房一處隱蔽的房頂上張望魏宽。 院中可真熱鬧,春花似錦索绪、人聲如沸湖员。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娘摔。三九已至,卻和暖如春唤反,著一層夾襖步出監(jiān)牢的瞬間凳寺,已是汗流浹背鸭津。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肠缨,地道東北人逆趋。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晒奕,于是被迫代替她去往敵國(guó)和親闻书。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 我認(rèn)為的編程能力: 基礎(chǔ)知識(shí):數(shù)據(jù)庫(kù)脑慧、操作系統(tǒng)魄眉、網(wǎng)絡(luò)原理等; 編碼能力:軟件架構(gòu)(MVVM闷袒、MVP)坑律、設(shè)計(jì)模...
    落影l(fā)oyinglin閱讀 975評(píng)論 2 7
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,345評(píng)論 0 2
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,149評(píng)論 0 13
  • 想象一下十年以后,我們的生活狀態(tài)也物、如果安安穩(wěn)穩(wěn)的掙著每個(gè)月5000塊錢宫屠,然后干到10年以后,你覺(jué)得你會(huì)成為一個(gè)富人...
    鄭惠彭閱讀 212評(píng)論 0 3
  • 從小到大,讀書是我一大愛(ài)好膘魄!敬愛(ài)的老媽常跟我親愛(ài)的女兒說(shuō)“陽(yáng)陽(yáng),你知道你媽媽小時(shí)候最愛(ài)讀書竭讳,零花錢都花費(fèi)到買...
    自由靈魚閱讀 566評(píng)論 0 0