gpt4 book ai didi

java - 用于打印格式正确的数字的递归代码的基本情况

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:48 25 4
gpt4 key购买 nike

我在网上发现了一个问题:给定输入大小打印所有符合该大小的格式正确的数字。

示例:大小 = 3数字:123、234、125 等条件,假设数字是 abc 那么 a < b < c

我正在尝试为此编写一个递归代码,但由于我不擅长递归,所以无法弄清楚基本情况,或者如何从递归中解脱出来。我有一个想法:

  1. 我从给定大小的最低格式数字开始(只需用 for 循环 填充数组)。假设 size = 3,我从 123 开始。然后我继续直到 arr[0] == (10 - size)) 因为这是给定大小的 arr[0] 的最大值形成的数。

我的函数是printNumbers(int arr[], int size)

但我不确定这是否可行。需要一些关于正确方向的指示。

public void findNumbers(int arr[], int size, int pos)
{
if(arr[0] == (10 - size))
return;
if(arr[pos] == (10 - size + pos))
{
pos--;
findNumbers(arr,size,pos);
}
System.out.println(Arrays.toString(arr));
arr[pos] = arr[pos] + 1;
findNumbers(arr,size,pos);
}

public static void main(String[] args)
{
int size = 3;
int pos = size-1;
int arr[] = new int[size];
for(int i = 0; i<size; i++)
{
arr[i] = i+1;
}
//System.out.println(Arrays.toString(arr));
WellFormed obj = new WellFormed();
obj.findNumbers(arr, size, pos);
}

最佳答案

import java.util.Arrays;

public class WellFormed {

public static int maxDigit;

public void findNumbers(int[] digits, int start, int currPos) {
if (currPos >= digits.length) {
System.out.println(Arrays.toString(digits));
return;
}

int maxDigitInCurrPos = maxDigit - digits.length + currPos + 1;
for (int i = start; i <= maxDigitInCurrPos; i++) {
digits[currPos] = i;
findNumbers(digits, i+1, currPos + 1);
}
}

public static void main(String[] args)
{
WellFormed obj = new WellFormed();
maxDigit = 5;
int inputSize = 3;
int[] digits = new int[inputSize];
obj.findNumbers(digits, 1, 0);
}
}

这很好用:

For inputSize = 3 and maxDigit = 5, output is:

[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 4]
[1, 3, 5]
[1, 4, 5]
[2, 3, 4]
[2, 3, 5]
[2, 4, 5]
[3, 4, 5]

关于java - 用于打印格式正确的数字的递归代码的基本情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com