標籤:字串 integer java 演算法 面試
【008-String to Integer (atoi) (字串轉成整數)】
【LeetCode-面試演算法經典-Java實現】【所有題目目錄索引】
原題
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函數,將字串轉成整形
要點:考慮所有的輸入情況。
解題思路
前置字元是+或-或者沒有,接下來輸入的是數字,數字不能整數能表示的最大或最小數。如果超過就返回對應的最小或者最小的值。
代碼實現
public class Solution { public int atoi(String str) { if (str == null || str.length() == 0) {// throw new NumberFormatException("Invalid input string: " + str); return 0; } // 如果字串以空格開始 int start = 0; //從開始找第一個不是空格的數 boolean positive = true; // 是否為正數預設為true if (str.charAt(start) == ‘ ‘) { while (str.charAt(start) == ‘ ‘) { start++; if (start >= str.length()) { // 輸入的全是空格// throw new NumberFormatException("Invalid input string: " + str); return 0; } } } if (str.charAt(start) == ‘-‘) { // 第一個非空白字元中- positive = false; start++; } else if (str.charAt(start) == ‘+‘) {// 第一個非空白字元是+ start++; } else if (str.charAt(start) >= ‘0‘ && str.charAt(start) <= ‘9‘) { // 第一個非空白字元是數字 return cal(str, start, true); } else { // 其它情況就拋出異常// throw new NumberFormatException("Invalid input string: " + str); return 0; } if (start >= str.length()) { // 第一個非空白字元是+或者-但也是最後一個字元// throw new NumberFormatException("Invalid input string: " + str); return 0; } if (str.charAt(start) > ‘9‘ || str.charAt(start) < ‘0‘) { // +或者-後面接的不是數字// throw new NumberFormatException("Invalid input string: " + str); return 0; } else { return cal(str, start, positive); } } private int cal(String str, int start, boolean positive) { long result = 0; while (start < str.length() && str.charAt(start) >= ‘0‘ && str.charAt(start) <= ‘9‘) { result = result * 10 + (str.charAt(start) - ‘0‘); if (positive) { // 如果是正數 if (result > Integer.MAX_VALUE) {// throw new NumberFormatException("Invalid input string: " + str); return Integer.MAX_VALUE; } } else { if (-result < Integer.MIN_VALUE) {// throw new NumberFormatException("Invalid input string: " + str); return Integer.MIN_VALUE; } } start++; } if (positive) { return (int) result; } else { return (int) -result; } }}
評測結果
點擊圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中查看完整圖片。
特別說明
歡迎轉載,轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/46938417】
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【LeetCode-面試演算法經典-Java實現】【008-String to Integer (atoi) (字串轉成整數)】