Wednesday, May 28, 2014

Reverse String | Reverse Integer

这两个题都不难,但是都有需要注意的小细节。
1, Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
[Thoughts]:这个题有个特别需要注意的地方就是word和word之间可能有不止一个空格。
    public String reverseWords(String s) {
        StringBuilder sb = new StringBuilder();
        String[] arr = s.split(" "); //split: String 常用方法
        
        for(String i : arr){
            if(!i.isEmpty()){// Note: String是否有连续为空情况。
                sb.insert(0, i);
                sb.insert(0, " ");//Note:新的word插在前面。
            }
        }
        return sb.toString().trim();//Note: 最后一个word多插入一个空格,要trim下。
    }
若是不可以用split方法呢,那就要乖乖的自己判断什么是string里的word了。
public class Solution {
    public String reverseWords(String s) {
        if(s.length()==0 || s==null) return s;
        StringBuilder sb = new StringBuilder();
        int start=0, end = 0;
        while(start<s.length()){
            while(start<s.length() && s.charAt(start)==' '){//Note: 这个while的意义就是怕words之间有多个空格。
                start++;
            }
            end = start;
            while(end<s.length() && s.charAt(end)!=' '){//Note:这个while的意义是找到单词的终点
                end++;
            }
            String word = s.substring(start, end);//Note:若是start和end都到达了string的终点,不额外check也没关系,这种情况下word为空,我们最后会trim
            sb.insert(0, word);
            sb.insert(0, " ");
            start = end;
        }
        return sb.toString().trim();
    }
}

2, Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

这个题也可以把integer看做string来操作,用到几个常用方法,比如:
1, Integer 转为 String: String.valueOf(x)。
2, String 转为 Integer: Integer.parseInt(new String(arr));

下面这种解法是用Integer的除法和余数解题,
例如123, 123每次以10为底取模,都是最后Integer的最后一位。
123每次除以10所得的数,都是除了最后一位的前n-1位。

    
    public int reverse(int x) {
        boolean flag = false;
        if(x < 0){//Note:一开始确定数的正负, 操作时,只对正数操作。
          flag = true;
          x = 0-x;
        }
  
        int result = 0;
        int p = x;
        while(p > 0){
          int mod = p % 10;
          p = p / 10;
          result = result * 10 + mod;
        }
  
        return flag ? 0-result : result;
    }

No comments:

Post a Comment