Java 简单数字发生器逻辑
我有一个电话号码0127 我正在尝试用JAVA逻辑生成数字跟随序列Java 简单数字发生器逻辑,java,Java,我有一个电话号码0127 我正在尝试用JAVA逻辑生成数字跟随序列 0 1 2 7 01 12 27 012 127 0127 1270 2701 7012 01270 12701 27012 . . 我正在打破我的头:-)将它分为两个步骤:子字符串和超字符串。 有时,解决大问题的最佳方法是将工作分成更容易解决的小问题 对于子字符串,请使用嵌套For循环 循环子字符串长度从1到string.length()-1 将起始字符从0循环到string.length()-1-substringLeng
0
1
2
7
01
12
27
012
127
0127
1270
2701
7012
01270
12701
27012
.
.
我正在打破我的头:-)将它分为两个步骤:子字符串和超字符串。 有时,解决大问题的最佳方法是将工作分成更容易解决的小问题 对于子字符串,请使用嵌套For循环
1
到string.length()-1
0
循环到string.length()-1-substringLength
对于超弦,您只需要一个循环来拾取起始角色。对于循环中的每个项目,从该字符开始构建字符串,直到给定长度,从最后一个字符换行到第一个字符。我会将数字转换为
字符串
对象,然后转换为字符数组
从那里,您可以使用以下逻辑对数组进行迭代:
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);
}
}
int MAX_LENGTH=10;
char[]array=“0127”。ToCharArray();
对于(int i=0;i
将MAX_LENGTH
更改为输出字符串的最大长度
以下是此代码生成的输出:
从
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?int MAX_LENGTH=5;
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);
}
}
字符串[]numStr={“0”、“1”、“2”、“7”};
对于(int i=0;i0&&offset+1==numStr.length)继续;
字符串disp=“”;
对于(int j=0;j=numStr.length)
索引-=numStr.length;
disp+=numStr[index];
}
系统输出打印项次(显示);
}
}
这是我的解决方案。使用测试编号执行,并生成相同的序列:
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);
}
}
}
公共静态无效打印序列(字符串编号){
final char[]charNumber=number.toCharArray();
final int-sizeNumber=number.length();
int MAX_ITER=5;
对于(int i=0;i 对于(int j=0;j我假设这是家庭作业?是的..对不起,伙计们,我花了太多时间搞不懂这个愚蠢的东西。你们看到了什么模式吗?到目前为止你们都搞明白了什么?我的进步..0,1,2,3,4,5,6,7…50…6,5,4,3,2,0->这是哪里iam@Soft-是因为您无法理解模式,还是代码有问题,或者两者都有?发布什么你认为模式是这样的。我不得不考虑这个问题而不是实际问题。只要说“:)+1考虑它而不是实际问题!我认为O(n^3)
对于家庭作业来说是可以接受的运行时复杂性所有发布的答案都是O(n^3)
。呃,这不是Java,它不会产生相同的序列(但我仍然认为,软件的问题遗漏了一些数字——因此,翻译成Java的算法可能就是解决问题的算法;)我对此做了一些小改动,得到了预期的结果。我忘了在内饰上将if
更改为。我更新了它并发布了一张结果图片。@Andreas,我相信它确实产生了相同的序列:)正如我所说的,我确信这是解决方案,但70、270和701不在问题的顺序中。@Soft-请仔细检查您的问题!!很好。请确保将(index>=numStr.length)
中的if(index>=numStr.length)
行更改为,而(index>=numStr.length)
输出与您的问题不同