標(biāo)簽:暴力吩坝、雙指針
輸入一個(gè)正整數(shù) target 毒姨,輸出所有和為 target 的連續(xù)正整數(shù)序列(至少含有兩個(gè)數(shù))。
序列內(nèi)的數(shù)字由小到大排列钾恢,不同序列按照首個(gè)數(shù)字從小到大排列手素。
public class findContinuousSequence {
static List<int[]> res = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int target = in.nextInt();
func2(target);
StringBuilder sb = new StringBuilder("[");
for (int[] curr : res) {
sb.append("[").append(curr[0]);
for (int i = 1; i < curr.length; ++i) {
sb.append(",").append(curr[i]);
}
sb.append("],");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
System.out.println(sb.toString());
}
in.close();
}
public static void func(int target){
int i = 1;
int j = 1;
int tmp = 0;
while(i <= (target / 2)){
if(tmp < target){
tmp += j;
j++;
}else if(tmp > target){
tmp -= i;
i++;
}else{
int[] cur = new int[j - i];
for(int k = i; k < j; k++){
cur[k - i] = k;
}
res.add(cur);
tmp -= i;
i++;
}
}
// return res.toArray(new int[res.size()][]);
}
public static void func2(int target){
for(int i = 1; i <= target; i++){
for(int j = i + 1; j < target; j++){
int pre = 0;
for(int k = i; k <= j; k++){
pre += k;
}
if(target == pre){
int[] t = new int[j - i + 1];
for (int k = i; k <= j; k++) {
t[k - i] = k;
}
res.add(t);
}
else if(pre > target){
break;
}
}
}
}
}