算法(三十)
1、输入一个正数target,打印出所有和为target的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。
public ArrayList<ArrayList<Integer>> fun1(int target){
ArrayList<ArrayList<Integer>> all_arr = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<>();
for(int i=1; i<target; i++){
arr=fun2(target, i);
if( arr[arr.length-1] != -1){
all_arr.add(arr);
}
}
return all_arr;
}
public ArrayList<Integer> fun2(int target, int n) {
ArrayList<Integer> arr = new ArrayList<>();
if(target < n) {
arr.add(-1);
return;
}
else if (target == n) {
arr.add(n);
return;
};
else{
arr.add(n);
fun2(target-n, n+1);
}
}
2、输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
public String PrintMinNumber(int [] numbers) {
int n=numbers.length;
ArrayList<Integer> list = new ArrayList<>();
String s="";
for(int i=0;i<n;i++){
list.add(numbers[i]);
}
Collections.sort(list, new Comparator<Integer>(){
public int compare(Integer str1, Integer str2){
String s1 = str1+""+str2;
String s2 = str2+""+str1;
return s1.compareTo(s2);
}
});
for(int j: list){
s+= j;
}
return s;
}
}
根据自己所见所闻进行算法归纳总结