Screenshot from 2016-02-29 10:41:32.png
My code:
public class Solution {
public void reverseWords(char[] s) {
if (s == null || s.length == 0)
return;
int begin = s.length - 1;
int end = s.length - 1;
while (end >= 0) {
char curr = s[end];
if (begin == end) {
if (curr == ' ') {
end--;
begin--;
}
else {
end--;
}
}
else {
if (curr == ' ') {
reverse(s, end + 1, begin);
end--;
begin = end;
}
else {
end--;
}
}
}
if (begin >= 0) {
reverse(s, 0, begin);
}
reverse(s, 0, s.length - 1);
}
private void reverse(char[] s, int begin, int end) {
if (s == null || s.length == 0 || begin > end)
return;
while (begin < end) {
char temp = s[begin];
s[begin] = s[end];
s[end] = temp;
end--;
begin++;
}
return;
}
}
之前做过类似的题目,但是用了额外空间。
希望这周有好运。
Anyway, Good luck, Richardo!
My code:
public class Solution {
public void reverseWords(char[] s) {
if (s == null || s.length == 0) {
return;
}
reverse(s, 0, s.length - 1);
int begin = 0;
for (int i = 0; i < s.length; i++) {
if (s[i] == ' ') {
reverse(s, begin, i - 1);
begin = i + 1;
}
}
reverse(s, begin, s.length - 1);
}
private void reverse(char[] s, int begin, int end) {
int i = begin;
int j = end;
while (i < j) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
}
不知道为什么之前代码写的那么复杂,是做 rotate array 转而过来做这道题目的。
还有,一些私有方法, private,其实不需要有太多的input check.
public method should check if input is valid or not
Anyway, Good luck, Richardo! -- 09/12/2016