| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | package mainimport (	"fmt"	"math"	"strings")func myAtoi(str string) int {	str = strings.Trim(str, " ")	if len(str) == 0 {		return 0	}	chars := []rune(str)	beg, end := 0, 0	isNegative := false	// judge the sign of the integer	switch chars[beg] {	case '-':		isNegative = true		fallthrough	case '+':		beg, end = 1, 1		// deal with "+" or "-"		if len(str) == 1 {			return 0		}	default:		beg, end = 0, 0	}	// find the first non-zero digit and the last valid digit	for ; end <= len(chars); end++ {		if chars[beg] == '0' {			beg++			// for str like "000000000000", return 0			if beg == len(chars) {				return 0			}			continue		}		if end == len(chars) || chars[end] < '0' || '9' < chars[end] {			break		}	}	if beg == end {		// no valid digit		return 0	} else if end-beg > 10 { // overflow (MaxInt32 & MinInt32 have 10 digits only)		if isNegative {			return math.MinInt32		}		return math.MaxInt32	}	sum, base := int64(0), int64(1)	for ; end > beg; end-- {		num := int64(chars[end-1] - '0')		sum += num * base		base *= int64(10)	}	if isNegative {		sum *= int64(-1)	}	if sum < math.MinInt32 {		return math.MinInt32	} else if sum > math.MaxInt32 {		return math.MaxInt32	}	return int(sum)}func testMyAtoi(str string) {	fmt.Printf("\"%s\" -> %d\n", str, myAtoi(str))}/* func main() {	testMyAtoi("")	testMyAtoi("       00000000000000000000           ")	testMyAtoi("+")	testMyAtoi("   -0.1    ")	testMyAtoi("   +1.1    ")	testMyAtoi("   234.1    ")	testMyAtoi("42")	testMyAtoi("9223372036854775808")	testMyAtoi("   -2.1    ")	testMyAtoi("   - 0.1    ")	testMyAtoi("   num 0.1    ")} */
 |