1. 程式人生 > >乘風破浪:LeetCode真題_008_String to Integer (atoi)

乘風破浪:LeetCode真題_008_String to Integer (atoi)

乘風破浪:LeetCode真題_008_String to Integer (atoi)

一、前言

   將整型轉換成字串,或者將字串轉換成整型,是經常出現的,也是必要的,因此我們需要熟練的掌握,當然也有很多工具來實現了,但是在這個基礎上加入一些其他的因素就是考點的所在了。

二、String to Integer (atoi)

2.1 問題理解

2.2 問題分析和解決

    看到這個問題,我們就需要遍歷字串,然後判斷開始的時候是不是空格,+,-,或者數字,如果不是的話就是不合理的,如果是,則繼續向後遍歷,直至遇到其他字元為止,將這之間的內容儲存下來,並且轉換成整型資料。如果發現大於整型的範圍則根據正負返回相應的結果。

    我們的程式碼:

 1 public class Solution {
 2 
 3     public int myAtoi(String str) {
 4 
 5         if (str == null || str.length() == 0) {
 6                return 0;
 7         }
 8 
 9         // 如果字串以空格開始
10         int start = 0; //從開始找第一個不是空格的數
11         boolean positive = true
; // 是否為正數預設為true 12 13 if (str.charAt(start) == ' ') { 14 while (str.charAt(start) == ' ') { 15 start++; 16 if (start >= str.length()) { // 輸入的全是空格 17 return 0; 18 } 19 } 20 } 21 22
if (str.charAt(start) == '-') { // 第一個非空白字元中- 23 positive = false; 24 start++; 25 } else if (str.charAt(start) == '+') {// 第一個非空白字元是+ 26 start++; 27 } else if (str.charAt(start) >= '0' && str.charAt(start) <= '9') { // 第一個非空白字元是數字 28 return cal(str, start, true); 29 } else { // 其它情況就丟擲異常 30 return 0; 31 } 32 33 if (start >= str.length()) { // 第一個非空白字元是+或者-但也是最後一個字元 34 return 0; 35 } 36 37 if (str.charAt(start) > '9' || str.charAt(start) < '0') { // +或者-後面接的不是數字 38 return 0; 39 } else { 40 return cal(str, start, positive); 41 } 42 } 43 44 private int cal(String str, int start, boolean positive) { 45 46 long result = 0; 47 while (start < str.length() && str.charAt(start) >= '0' && str.charAt(start) <= '9') { 48 result = result * 10 + (str.charAt(start) - '0'); 49 50 if (positive) { // 如果是正數 51 if (result > Integer.MAX_VALUE) { 52 return Integer.MAX_VALUE; 53 } 54 } else { 55 if (-result < Integer.MIN_VALUE) { 56 return Integer.MIN_VALUE; 57 } 58 } 59 60 start++; 61 } 62 63 if (positive) { 64 return (int) result; 65 } else { 66 return (int) -result; 67 } 68 } 69 }

三、總結

    通過這樣的實踐,使得我們對於一些細節上的東西有了更深刻的認識,比如越界問題,比如正負號問題,以及正負號之後是不是數字,空格等等的解決方法。