成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

July 算法習(xí)題 - 字符串2 + Leetcode 8,9

timger / 2915人閱讀

摘要:判斷一條單向鏈表是不是回文解法可以借助棧,將遍歷到的前半段鏈表節(jié)點(diǎn)放入棧,后半段每當(dāng)遍歷到一個(gè),都要與出棧的節(jié)點(diǎn)相比較。如果中間出現(xiàn)不相等的情況,則不是回文。

  

[July 程序員編程藝術(shù):面試和算法心得題目及習(xí)題][1]

字符串轉(zhuǎn)換成整數(shù)

also Leetcode 8 String to Integer (atoi)

題目描述

輸入一個(gè)由數(shù)字組成的字符串,把它轉(zhuǎn)換成整數(shù)并輸出。例如:輸入字符串 "123",輸出整數(shù) 123。
給定函數(shù)原型int StrToInt(const char *str) ,實(shí)現(xiàn)字符串轉(zhuǎn)換成整數(shù)的功能,不能使用庫函數(shù) atoi。

解題思路

實(shí)現(xiàn)是簡單的,但是這道題主要考的是程序的魯棒性??梢哉f要正確及完整的實(shí)現(xiàn)這道題,需要考慮所有常見的邊界條件。

空指針輸入:輸入的是指針,在訪問空指針時(shí)程序會(huì)崩潰,因此在使用指針之前需要先判斷指針是否為空。

正負(fù)符號(hào):整數(shù)不僅包含數(shù)字,還有可能是以"+"或"-"開頭表示正負(fù)整數(shù),因此如果第一個(gè)字符是"-"號(hào),則要把得到的整數(shù)轉(zhuǎn)換成負(fù)整數(shù)。

非法字符:輸入的字符串中可能含有不是數(shù)字的字符。因此,每當(dāng)碰到這些非法的字符,程序應(yīng)停止轉(zhuǎn)換。

整型溢出:輸入的數(shù)字是以字符串的形式輸入,因此輸入一個(gè)很長的字符串將可能導(dǎo)致溢出

public class Solution {
    public int atoi(String str) {
        int digit=0;
        int positive = 1;
        double number=0;
        str = str.trim();
        if(str.length() == 0  || str == null){
            return 0;
        }
        if(str.charAt(0) =="+"){
            positive = 1;
            digit++;
        }
        if(str.charAt(0) == "-"){
            positive = -1;
            digit++;
        }
        while(digit<=str.length()-1){
            int k = 0;
            if(str.charAt(digit)<="9"&&str.charAt(digit)>="0"){
                k = str.charAt(digit) -"0";
                number  = k + number * 10; 
                digit++;
            }
            else{
                break;
            }
        }
        number = number * positive;
        System.out.println(""+number);
        if(number > Integer.MAX_VALUE ){
            return Integer.MAX_VALUE; 
        }
        if(number < Integer.MIN_VALUE){
            return Integer.MIN_VALUE;
        }
        return (int)number;
    }
}
習(xí)題:實(shí)現(xiàn) string 到 double 的轉(zhuǎn)換

分析:此題雖然類似于 atoi 函數(shù),但畢竟 double 為 64 位,而且支持小數(shù),因而邊界條件更加嚴(yán)格,寫代碼時(shí)需要更加注意。

回文判斷 一個(gè)整形數(shù)是否是回文

also leetcode 9 Palindrome Number
要求空間復(fù)雜度O(1)
按位判斷一般是/%的游戲,首先取首位 a/h (h是最接近a的10的次方,比如12321,h預(yù)計(jì)算出是10000), 再取末位a%10; 比較首位和末位是否相等,不等就返回false;

如圖:

然后舍棄掉已經(jīng)比較過的兩個(gè)位數(shù),從a中去掉首尾 12321 --> 232.

a = a % h; // 去掉首
a = a /10; //去掉尾
h = 100; // 因?yàn)橐呀?jīng)去掉了兩位

如圖:

重復(fù)之前操作即可,如圖:

    public boolean isPalindrome(int x) {
        int a = x, h =1;
        if(a < 0) return false;

        while(a / h>= 10) {
            h = h*10;
        }
        //compare the last and first digit and will not overflow    
        while(a> 0) {
            if(a/h != a%10) return false;
            a = a%h;
            a = a/10;
            h = h/100;
        }
        return true;
    }

一個(gè)字符串是否是回文

指一個(gè)順著讀和反過來讀都一樣的字符串,判斷一個(gè)字串是否是回文?

這個(gè)比較簡單用charAt 取字符串的首尾位比較即可。

判斷一條單向鏈表是不是 “回文”

解法1 : 可以借助棧,將遍歷到的前半段鏈表節(jié)點(diǎn)放入棧,后半段每當(dāng)遍歷到一個(gè),都要與出棧的節(jié)點(diǎn)相比較。直到鏈表結(jié)尾。如果中間出現(xiàn)不相等的情況,則不是回文。
時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)

如何進(jìn)一步降低空間復(fù)雜度為O(1)
解法2:
分析:對(duì)于單鏈表結(jié)構(gòu),可以用兩個(gè)指針從兩端或者中間遍歷并判斷對(duì)應(yīng)字符是否相等。但這里的關(guān)鍵就是如何朝兩個(gè)方向遍歷。由于單鏈表是單向的,所以要向兩個(gè)方向遍歷的話,可以采取經(jīng)典的快慢指針的方法,即先位到鏈表的中間位置,再將鏈表的后半逆置,最后用兩個(gè)指針同時(shí)從鏈表頭部和中間開始同時(shí)遍歷并比較即可。
缺陷: 破壞了鏈表的結(jié)構(gòu)

判斷一個(gè)棧是不是 “回文”

分析:對(duì)于棧的話,只需要將字符串全部壓入棧,然后依次將各字符出棧,這樣得到的就是原字符串的逆置串,分別和原字符串各個(gè)字符比較,就可以判斷了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65296.html

相關(guān)文章

  • 符串處理文章outline

    摘要:遇到問題查查,看看,大神的講解問問島胖君下面是我最近整理出來的關(guān)于字符串的文章的怎么翻譯匯集目錄非常希望強(qiáng)化博客的功能,比如分類,置頂。 雖是讀書筆記,但是如轉(zhuǎn)載請(qǐng)注明出處 http://segmentfault.com/blog/exploring/ .. 拒絕伸手復(fù)制黨 最近在看算法和語言,基本屬于看知識(shí) --> java實(shí)現(xiàn) --> 整理blog 這個(gè)路線。 遇到問題查查st...

    Karuru 評(píng)論0 收藏0
  • July算法習(xí)題 - 符串1

    摘要:反轉(zhuǎn)上述步驟得到的結(jié)果字符串,即反轉(zhuǎn)字符串的兩部分和給予反轉(zhuǎn),得到,形式化表示為,這就實(shí)現(xiàn)了整個(gè)反轉(zhuǎn)。例如,原字符串為,,輸出結(jié)果為。同單詞翻轉(zhuǎn)輸入一個(gè)英文句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變,句子中單詞以空格符隔開。 July 程序員編程藝術(shù):面試和算法心得題目及習(xí)題 旋轉(zhuǎn)字符串 題目描述 給定一個(gè)字符串,要求把字符串前面的若干個(gè)字符移動(dòng)到字符串的尾部,如...

    Betta 評(píng)論0 收藏0
  • July 算法習(xí)題 - 符串4(全排列和全組合)

    摘要:求字符串的全排列字符串的全排列設(shè)計(jì)一個(gè)算法,輸出一個(gè)字符串字符的全排列。的做法沒有結(jié)果的,都是在一個(gè)字符串上進(jìn)行的操作。字符串的全組合輸入三個(gè)字符,則它們的組合有。因此可以循環(huán)字符串長度,然后輸出對(duì)應(yīng)代表的組合即可。 求字符串的全排列 字符串的全排列 設(shè)計(jì)一個(gè)算法,輸出一個(gè)字符串字符的全排列。 比如,String = abc 輸出是abc,bac,cab,bca,cba,...

    tuniutech 評(píng)論0 收藏0
  • 符串的全排列

    摘要:問題輸入一個(gè)字符串按字典序打印出該字符串中字符的所有排列。如此遞歸處理,從而得到所有字符的全排列。記斐波那契數(shù)列的第位這件事為,則有。其中,表示去掉那個(gè)開頭字符的剩余字符串的全排列。 問題 輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來的所有字符串a(chǎn)bc,acb,bac,bca,cab和cba。 地址:https://...

    sunny5541 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<