標籤:記錄 leetcode eof 無法 math 根據 turn 結果 分享
實現 atoi,將字串轉為整數。
該函數首先根據需要丟棄任意多的空白字元,直到找到第一個非空白字元為止。如果第一個非Null 字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非Null 字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。
字串可以在形成整數的字元後麵包括多餘的字元,這些字元可以被忽略,它們對於函數沒有影響。
當字串中的第一個非Null 字元序列不是個有效整數;或字串為空白;或字串僅包含空白字元時,則不進行轉換。
若函數不能執行有效轉換,返回 0。
說明:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [?231, 231 ? 1]。如果數值超過可表示的範圍,則返回 INT_MAX (231 ? 1) 或 INT_MIN (?231) 。
樣本 1:
輸入: "42"輸出: 42
樣本 2:
輸入: " -42"輸出: -42解釋: 第一個非空白字元為 ‘-‘, 它是一個負號。 我們儘可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。
樣本 3:
輸入: "4193 with words"輸出: 4193解釋: 轉換截止於數字 ‘3‘ ,因為它的下一個字元不為數字。
樣本 4:
輸入: "words and 987"輸出: 0解釋: 第一個非Null 字元是 ‘w‘, 但它不是數字或正、負號。 因此無法執行有效轉換。
樣本 5:
輸入: "-91283472332"輸出: -2147483648解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。 因此返回 INT_MIN (?231) 。
解答:
import java.math.BigInteger;class Solution { public int myAtoi(String str) { str = str.trim(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); // 過濾無效的0 if(sb.length()==0&&c==48){ continue; } if (i == 0) { if (c == ‘-‘ || c == ‘+‘ || (c >= 48 && c <= 57)) { sb.append(c); } else { break; } } else { if (c >= 48 && c <= 57) { sb.append(c); } else { break; } } } if ("".equals(sb.toString())||"-".equals(sb.toString())||"+".equals(sb.toString())) { return 0; } int result; try { result = Integer.valueOf(sb.toString()); } catch (NumberFormatException e) { if (sb.toString().startsWith("-")) { return Integer.MIN_VALUE; } else { return Integer.MAX_VALUE; } } return result; }}
提交結果:
leetcode記錄-字串轉整數