LeetCode - 8. String to Integer (atoi) #Java

Question


Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

這題的難點應該是atoi這個到底是個神馬函數(shù)弃甥,輸入輸出的結(jié)果是啥色乾。

查了查資料,發(fā)現(xiàn)是這樣的規(guī)律:

  • 返回類型為int類型主巍,若字符串越界笋敞,則返回Integer.MAX_VALUE或Integer.MIN_VALUE.
  • 開頭是+返回正數(shù)碱蒙;-返回負數(shù)。例如“+23”返回23夯巷;“-42”返回-42赛惩。
  • 開頭不是數(shù)字,則返回0:“fw923”和“+se243”都返回0趁餐。
  • 若開頭為空格喷兼,則無視空格:“ 233”返回233。
  • 只取連續(xù)的數(shù)字:“233pp233”返回的是233而不是233233后雷。

貌似暫時就這么多季惯。

所以應對這些規(guī)律的解題思路:

  • 首先判斷字符串是否為空或長度為0
  • 用trim()去掉字符串首尾的空格
  • 判斷符號
  • 判斷是否越界

注意點:

  • 返回值sum定義為long,最后return的時候再強制轉(zhuǎn)換為int
  • 判斷越界要在for循環(huán)里

Solutions


public class Solution {
    public int myAtoi(String str) {
        // 判斷是否為空和長度是否為0
        if(str == null || str.length() == 0)
            return 0;
        
        // 去掉字符串首尾的空格
        str = str.trim();
        
        int sign = 1, start = 0, len = str.length();
        long sum = 0;
        
        // 判斷符號
        char firstChar = str.charAt(0);
        if (firstChar == '+') {
            sign = 1;
            start++;
        } else if (firstChar == '-') {
            sign = -1;
            start++;
        }
        
        for (int i = start; i < len; i++) {
            if (!Character.isDigit(str.charAt(i))) // 判斷是否為數(shù)字
                return (int) sum * sign;
                
            sum  = sum * 10 + str.charAt(i) - '0';
            
            // 判斷是否越界
            if (sign == 1 && sum > Integer.MAX_VALUE) {
                return Integer.MAX_VALUE;
            }
            if (sign == -1 && (-1) * sum < Integer.MIN_VALUE) {
                return Integer.MIN_VALUE;
            }
        }
        
        return (int) sum * sign;
    }
}

Points


  • String.trim()
    去掉字符串首尾的空格喷面,保留中間的

  • String.charAt()
    返回指定索引處的char值

  • Character.isDigit(char c)
    判斷字符c是否為0-9的數(shù)字字符

  • 獲取數(shù)字字符char的值
    int value = c - '0';

  • int的邊界
    Integer.MAX_VALUE & Integer.MIN_VALUE

TO DO


暫無

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末星瘾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惧辈,更是在濱河造成了極大的恐慌琳状,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盒齿,死亡現(xiàn)場離奇詭異念逞,居然都是意外死亡,警方通過查閱死者的電腦和手機边翁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門翎承,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人符匾,你說我怎么就攤上這事叨咖。” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵甸各,是天一觀的道長垛贤。 經(jīng)常有香客問我,道長趣倾,這世上最難降的妖魔是什么聘惦? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮儒恋,結(jié)果婚禮上善绎,老公的妹妹穿的比我還像新娘。我一直安慰自己诫尽,他們只是感情好禀酱,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箱锐,像睡著了一般比勉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驹止,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天浩聋,我揣著相機與錄音,去河邊找鬼臊恋。 笑死衣洁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的抖仅。 我是一名探鬼主播坊夫,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撤卢!你這毒婦竟也來了环凿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤放吩,失蹤者是張志新(化名)和其女友劉穎智听,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渡紫,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡到推,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惕澎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莉测。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖唧喉,靈堂內(nèi)的尸體忽然破棺而出捣卤,到底是詐尸還是另有隱情忍抽,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布腌零,位于F島的核電站梯找,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏益涧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一驯鳖、第九天 我趴在偏房一處隱蔽的房頂上張望闲询。 院中可真熱鬧,春花似錦浅辙、人聲如沸扭弧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸽捻。三九已至,卻和暖如春泽腮,著一層夾襖步出監(jiān)牢的瞬間御蒲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工诊赊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厚满,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓碧磅,卻偏偏與公主長得像碘箍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鲸郊,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗丰榴。 張土汪:刷leetcod...
    土汪閱讀 12,724評論 0 33
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法秆撮,內(nèi)部類的語法四濒,繼承相關的語法,異常的語法像吻,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,790評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理峻黍,服務發(fā)現(xiàn),斷路器拨匆,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 我認識他是在遙遠的1998年姆涩,如今提起那一年,能回想起的只有王菲和那英的歌惭每,以及那屆的世界杯骨饿。 那時還在上小學的我...
    小阿爾閱讀 304評論 0 1