LeetCode刷题7-用连续自然数之和来表达整数
package com.example.demo.leetcode.case202208; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; /** * 功能描述 * * @author ASUS * @version 1.0 * @Date 2022/8/6 */ public class Main2022080601 { /* 1.输入正整数T,输出T可以由连续自然数的和表示的所有情况及其数量。 如输入:9 输出: 9=9 9=4+5 9=2+3+4 Result=3 解释:9可以由3种形式的连续自然数的和表示,Result为3。 y */ public static void main(String[] args) { // 获取输入的字符串 Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); // 倒序从最大开始遍历 枚举 // 符合要的总数 StringBuilder total = new StringBuilder(); for (int i = T; i > 1; i--) { // 整数本身 if (i == T) { total.append("1"); System.out.println(T + "=" + T); continue; } // 从最高位 递归枚举 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(T).append("=").append(i).append("+"); getNextNumber(i, i - 1, T, stringBuilder, total); } // 输出总的个数 System.out.println("Result=" + total.length()); } /** * 累加求和判断 * * @param sum * @param num * @param target * @param stringBuilder * @param total */ private static void getNextNumber(int sum, int num, int target, StringBuilder stringBuilder, StringBuilder total) { stringBuilder.append(num); sum = sum + num; if (sum > target) { return; } if (sum == target) { total.append("1"); // 自然数从大到小 // System.out.println(stringBuilder); // 自然数从小到大 sortedNumber(stringBuilder); return; } if (num == 1) { return; } getNextNumber(sum, num - 1, target, stringBuilder.append("+"), total); } /** * 按从小到大的顺序组合 * * @param stringBuilder */ private static void sortedNumber(StringBuilder stringBuilder) { String subPrefix = stringBuilder.substring(0, stringBuilder.indexOf("=") + 1); String substring = stringBuilder.substring(stringBuilder.indexOf("=") + 1); String[] split = substring.replace("+", ",").split(","); List<String> list = Arrays.asList(split).stream().sorted().collect(Collectors.toList()); System.out.println(subPrefix + list.stream().collect(Collectors.joining("+"))); } }
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16556885.html