1, Given an input string, reverse the string word by word.
For example,
[Thoughts]:这个题有个特别需要注意的地方就是word和word之间可能有不止一个空格。
Given s = "
the sky is blue",
return "
blue is sky the". 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位。
下面这种解法是用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