输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
输入:target = 9
输出:[[2,3,4],[4,5]]
枚举+暴力
public class FindContinuousSequence {
public int[][] findContinuousSequence(int target) {
/**
* @Method: findContinuousSequence
* @Author: haifwu
* @Version: 1.0
* @Date: 21/05/2021 10:25
* @param target
* @Return: java.util.List<java.util.List<java.lang.Integer>>
* @Description: 枚举 + 暴力
*
*/
List<int[]> list = new ArrayList<>();
int n = target / 2 + 1; // 下取整
for(int i = 1; i < n; i ++) {
int sum = i, t = i + 1;
while(sum < target && t <= n) {
sum += t;
if (sum == target) {
int[] temp = new int[t - i + 1];
for(int k = i; k <= t; ++k) {
temp[k - i] = k;
}
list.add(temp);
break;
}
t++;
}
}
return list.toArray(new int[list.size()][]);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int target = scanner.nextInt();
int[][] list = new FindContinuousSequence().findContinuousSequence(target);
int n = list.length;
for (int i = 0; i < n; i++) {
int m = list[i].length;
for (int j = 0; j < m; j++) {
System.out.print(list[i][j] + " ");
}
System.out.println();
}
}
}
原文:https://www.cnblogs.com/haifwu/p/14792829.html