1. 程式人生 > >字符串問題----將整數字符串轉換成整數值

字符串問題----將整數字符串轉換成整數值

最大 範圍 轉換成 ret 表示 形式 com 解題思路 integer

將整數字符串轉換成整數值

  

  給定一個字符串str,如果str符合日常書寫的規範,並屬於32位整數的範圍,返回str所代表的整數值,否則返回0。如 023, A13, 2147483648,均返回0。

  【解題思路】

  定義四個變量,flag表示正負,res表示結果,minq表示最小值除以10的商,minr表示最小值除以10 的余數。因為最小值是 -2147483648,最大值是2147483647,負數有更大的範圍,所以以負數的形式保留絕對值,最後根據flag進行修改。

package com.test;

/**
 * Created by Demrystv.
 */
public class
convertNumAtr2NumVal { public int convert(String str){ if (str == null || str.equals("")){ return 0; } //不符合格式要求,不能轉 char[] chars = str.toCharArray(); if (!isValid(chars)){ return 0; } boolean flag = chars[0] == ‘-‘ ? false
: true; int minq = Integer.MIN_VALUE / 10; int minr = Integer.MIN_VALUE % 10; int res = 0; int cur = 0; for (int i = flag ? 0 : 1; i < chars.length; i++) { cur = ‘0‘ - chars[i]; //用當前數字的負數形式 // 超出範圍 if (cur < minq || (res == minq && cur < minr)){
return 0; } res = res * 10 + cur; } //正好比整數的最大值大1 if (flag && res == Integer.MIN_VALUE){ return 0; } return flag ? -res : res; } private boolean isValid(char[] chars){ // A02這種情況 if (chars[0] != ‘-‘ && (chars[0] < ‘0‘ || chars[0] > ‘9‘ )){ return false; } // - 或者 -012 這種情況 if (chars[0] == ‘-‘ && (chars.length == 1 || chars[1] == 0)){ return false; } // 012這種情況 if (chars[0] == ‘0‘ && chars.length > 1){ return false; } // 從第二位開始,對應的是 0B2 for (int i = 1; i < chars.length; i++) { if (chars[i] < ‘0‘ || chars[i] > ‘9‘){ return false; } } return true; } }

字符串問題----將整數字符串轉換成整數值