DAY 5 Interview

1. Implement atoi to convert a string to an integer.

Approach: 

int foo = Integer.parseInt("1234");

The vague description give us space to consider different cases.

1. null or empty string
2. white spaces
3. +/- sign
4. calculate real value
5. handle min & max

Java Solution

public int atoi(String str) {
	if (str == null || str.length() < 1)
		return 0;
 
	// trim white spaces
	str = str.trim();
 
	char flag = '+';
 
	// check negative or positive
	int i = 0;
	if (str.charAt(0) == '-') {
		flag = '-';
		i++;
	} else if (str.charAt(0) == '+') {
		i++;
	}
	// use double to store result
	double result = 0;
 
	// calculate value
	while (str.length() > i && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
		result = result * 10 + (str.charAt(i) - '0');
		i++;
	}
 
	if (flag == '-')
		result = -result;
 
	// handle max and min
	if (result > Integer.MAX_VALUE)
		return Integer.MAX_VALUE;
 
	if (result < Integer.MIN_VALUE)
		return Integer.MIN_VALUE;
 
	return (int) result;
}

Thanks to the comment below. The solution above passes LeetCode online judge, but it haven’t considered other characters

 

2. Palindromic number

Determine whether an integer is a palindrome. Do this without extra space.

 

public class Solution {
public boolean isPalindrome(int x) {
     if (x>=0) {
          int reverse = 0;
          int digit = 0;
          if (x< 10) {
                   return true;
          } else {
                   int rest = x;
                   while (rest!=0) {
                            digit = rest%10;
                            rest = rest/10;
                            if (rest>0) {
                                     reverse = (reverse + digit) * 10;
                            }
                   }
                   reverse = reverse + digit;

                   if (reverse == x) {
                            return true;
                   } else {
                            return false;
                   }
          }
     } else {
          int absValue = Math.abs(x);

          int reverse = 0;
          int digit = 0;
          if (absValue < 10) {
                   return false;
          } else {
                   int rest = absValue;
                   while (rest!=0) {
                            digit = rest%10;
                            rest = rest/10;
                            if (rest>0) {
                                     reverse = (reverse + digit) * 10;
                            }
                   }
                   reverse = reverse + digit;

                   if (reverse == absValue) {
                            return true;
                   } else {
                            return false;
                   }
          }
     }
}
}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s