组合的输出(洛谷P1157题题解,Java语言描述)

题目要求

P1157题目链接
在这里插入图片描述

分析

当然是使用递归的DFS啦!
我不知道Java如何设置场宽,所以手动通过空格来补位。

d a l a o dalao 的非递归实现

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {

    private static int r, n;

    private static int[] array;

    private static void dfs(int k) {
        if(k > r) {
            StringBuilder builder = new StringBuilder();
            for(int i = 1; i <= r; i++) {
                if (array[i] >= 10) {
                    builder.append(" ").append(array[i]);
                } else {
                    builder.append("  ").append(array[i]);
                }
            }
            System.out.println(builder);
            return;
        }
        for(int i = array[k-1]+1; i <= n; i++){
            array[k] = i;
            dfs(k+1);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        r = scanner.nextInt();
        scanner.close();
        array = new int[n+1];
        dfs(1);
    }
    
}
发布了703 篇原创文章 · 获赞 1493 · 访问量 68万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104848724