1.当返回值为二维数组时
返回值是一个二维数组时,先新建一个List<int[]> res = new ArrayList<>();
最终return res.toArray(new int[res.size()][]);
然后在中间过程中可以新建一个数组,将数组arr 直接加入到 res 中 res.add(arr);
剑指offer57-2 滑动窗口
public int[][] findContinuousSequence(int target) {
List<int[]> res = new ArrayList<>();
int sum = 0;
int i=1;
int j=1;
while(i<=target/2){
if(sum<target){
sum+=j;
j++;
}else if(sum>target){
sum-=i;
i++;
}else{
int[] arr = new int[j-i];
for(int x=i;x<j;x++){
arr[x-i] =x;
}
res.add(arr);
sum -=i;
i++;
}
}
return res.toArray(new int[res.size()][]);
}
2.返回值为String,核心是对字符串的处理
主要适用StringBuilder 的append ()、insert(int index) ,deleteCharAt(int index), delete(int start,int end) 左闭右开,String 的trim(),
//暴力
public String reverseWords(String s) {
if(s==null||s.length()==0) return s;
s= s.trim();
StringBuilder res = new StringBuilder();
StringBuilder temp = new StringBuilder();
temp.append(" ");
for(int i =0;i<s.length();i++){
if(temp.length()==1&&s.charAt(i)==' ')continue;
if(s.charAt(i)==' '){
res.insert(0,temp);
temp = new StringBuilder();
temp.append(" ");
continue;
}
temp.append(s.charAt(i));
}
res.insert(0,temp);
res.deleteCharAt(0);
return res.toString();
}
//双指针
public String reverseWords(String s) {
s = s.trim();
int j = s.length()-1;
int i=j;
StringBuilder res = new StringBuilder();
while(i>=0){
while(i>=0&&s.charAt(i)!=' ')i--;
res.append(s.substring(i+1,j+1)+" ");
while(i>=0&&s.charAt(i)==' ')i--;
j=i;
}
return res.toString().trim();
}