Possibility to break => Use while loop and an IDNEX
Integer.MAX_VALUE = 2147483647
Integer.MIN_VALUE = -2147483648
Long.MAX_VALUE = 9223372036854775807
Long.MIN_VALUE = -9223372036854775808
"+" and "-"
"456"=>456
2. Implementation
Q1: LSB->MSB
A1: start from LSB to MSB and use res = res*10+ current digit
Q1: special character?
A1: trim and check valid >="0" && <="9"
public int myAtoi(String str) { // validate the input if ( str == null || str.length() == 0 ) { return 0; } str = str.trim(); // NOTE: could be all spaces if ( str.length() == 0) return 0; boolean negFlag = flase; //if ( str.charAt(0) == '-') // negFlag =true; // NOTE: could have no sign, so put an index int index = 0; if ( str.charAt(0) == '-' || str.charAt(0) == '+' ) { index++; if ( str.charAt(0) == '-') negFlag = true; } //// NOTE: 2147483647 //int number = 0; ////for (int i = str.length()-1 ; i >= 1 ; i ++) ////for ( int i = 1 ; i < str.length;i++ ) //// NOTE: couldbe no sign //for (int i = index; i < str.length() ; i++ ) //{ // char c = str.charAt(i); // if ( c >= '0' && c <='9' ) // { // // if ( i == str.length() -1 && number >= Integer.MAX_VALUE /10 ) // number = (negFlag==true)?Integer.MIN_VALUE:Integer.MAX_VALUE; // else if ( number == Integer.MAX_VALUE/10 ) // { // if ( c >= '7' && c <='9' && negFlag == false) // return Integer.MAX_VALUE; // else if ( c >='8' && c <='9' && negFlag ==true) // return Integer.MIN_VALUE; // } // else // //number = number*10 + (int)c; // // NOTE: chat to int - '0' // number = number*10 + (int)(c - '0'); // } // else // { // // NOTE: // break; // } //} int number = 0; while ( index < str.length()) { if ( str.charAt(index) < '0' || str.charAt(index) > '9' ) break; int digit = (int) (str.charAt(index) - '0'); // NOTE: -(res*10+digit) < Integer.MIN_VALUE if ( negFlag && res > -(Integer.MIN_VALUE+digit)/10 ) return Integer.MIN_VALUE; // NOTE: res*10+digit > Integer.MAX_VALUE else if ( !negFlag && res > (Integer.MAX_VALUE-digit)/10 ) return Integer.MAX_VALUE; number = number*10+digit; index++; } //return number ; return negFalg?-number:number; }3. Similar Ones
(E) Reverse Integer
(H) Valid Number
No comments:
Post a Comment