我有一个号码0127
我正在尝试在JAVA中生成数字跟随序列的逻辑
0
1
2
7
01
12
27
012
127
0127
1270
2701
7012
01270
12701
27012
.
.
我正在打破我的脑袋: - )
答案 0 :(得分:1)
将其分为两个步骤:子串和超弦。
有时,解决大问题的最佳方法是将工作分成更容易解决的小问题。
对于子字符串,请使用嵌套for循环。
1
转换为string.length() - 1
0
到string.length() - 1 - substringLength
在内部循环中,从给定的起始字符生成给定长度的子字符串。这将生成所有子字符串。
对于超弦,您只需要一个循环来选择起始字符。对于循环中的每个项目,从该字符开始并构建字符串,直到给定的长度,从最后一个字符包装到第一个字符。
答案 1 :(得分:1)
我会将数字转换为String
对象,然后转换为字符数组。
从那里,您可以使用以下逻辑迭代数组:
int MAX_LENGTH = 10;
char[] array = "0127".ToCharArray();
for (int i = 0; i < MAX_LENGTH; i++)
{
for (int offset = 0; offset < array.Length; offset++)
{
String disp = "";
for (int j = 0; j <= i; j++)
{
int index = j + offset;
while (index >= array.Length)
index -= array.Length;
disp += array[index];
}
Console.WriteLine(disp);
}
}
将MAX_LENGTH
更改为输出字符串的最大长度。
以下是此代码生成的输出:
答案 2 :(得分:1)
从0
到0127
(包含)的前几行都是{0,1,2,7}
的子序列(缺少空集)。
对于其余部分 - 就像响铃,您选择一个起始编号,然后朝一个方向“走”n
步:
0
/ \
7 1
\ /
2
这会产生:
n=1: 0, 1, 2, 7
n=2: 01, 12, 27, 70
n=3: 012, 127, 270, 701
n=4: 0127, 1270, 2701, 7012
但是我看不到这两个部分之间的联系 - 你确定,问题中的序列是完整的,没有数字丢失吗?特别是70,270和701?
答案 3 :(得分:1)
int MAX_LENGTH = 5;
String[] numStr = {"0","1","2","7"};
for (int i = 0; i < MAX_LENGTH; i++)
{
for (int offset = 0; offset < numStr.length; offset++)
{
if(i>0 && offset+1 == numStr.length) continue;
String disp = "";
for (int j = 0; j <= i; j++)
{
int index = j + offset;
if (index >= numStr.length)
index -= numStr.length;
disp += numStr[index];
}
System.out.println(disp);
}
}
答案 4 :(得分:0)
这是我的解决方案。它使用测试的数字执行,并生成相同的序列:
public static void printSequence(String number) {
final char[] charNumber = number.toCharArray();
final int sizeNumber = number.length();
int MAX_ITER = 5;
for (int i = 0; i < MAX_ITER; i++) {
for (int offset = 0; offset < sizeNumber; offset++) {
String subSequence = "";
for (int j = 0; j <= i; j++) {
int index = (j + offset) % sizeNumber;
subSequence += charNumber[index];
}
System.out.println(subSequence);
}
}
}