输入格式
第一行包含序列中的数字集合,数字按升序排列。
边界条件
1≤M≤99999,字符串S的长度为5到200个字符。
输出格式
第一行将包含缺失的数字M。
示例输入/输出1
输入:12346789
输出:5
示例输入/输出2
输入:596597598600601602
输出:599
序列中的数字为596 597 598 599 600 601 602。599是缺失的数字。
我的Java解决方案:
我使用了split(("?<=\\G..."))
等方法,把数字分成一位、两位、三位、四位和五位,然后把这些数字保存到相应的数组中。接着,我检查数组中任意两个相邻数字之间是否差为1,如果是,则调用一个函数来查找缺失的数字。
但问题是当:
输入:
999899991000110002
输出:
10000
数列是9998 9999 10001 10002。缺失的数字是10000。
当4位数变成5位数时,如何分割字符串?有没有更好的解决方法?
public void test(Scanner in)
{
String n = in.nextLine();
int n1 = n.length();
System.out.println(n1);
if (n1 % 2 == 0)
{
} else {
n = "0" + n;
}
System.out.println(n);
String[] one = n.split("(?<=\\G.)");
String[] two = n.split("(?<=\\G..)");
String[] three = n.split("(?<=\\G...)");
String[] four = n.split("(?<=\\G....)");
String[] five = n.split("(?<=\\G.....)");
int x = one.length;
int y = two.length;
int z = three.length;
int u = four.length;
int v = five.length;
int[] aa1 = new int [x];
int[] aa2 = new int [y];
int[] aa3 = new int [z];
int[] aa4 = new int [u];
int[] aa5 = new int [v];
for (int i = 0; i < x; i++)
{
aa1[i] = Integer.parseInt(one[i]);
}
if (aa1[1] == aa1[3] - 2)
{
findmissing(aa1, x);
}
for (int i = 0; i < y; i++)
{
aa2[i] = Integer.parseInt(two[i]);
}
if (aa2[1] == aa2[3] - 2)
{
findmissing(aa2, y);
}
for (int i = 0; i < z; i++)
{
aa3[i] = Integer.parseInt(three[i]);
}
if (aa3[1] == aa3[3] - 2)
{
findmissing(aa3, z);
}
for (int i = 0; i < u; i++)
{
aa4[i] = Integer.parseInt(four[i]);
}
if (aa4[1] == aa4[3] - 2)
{
findmissing(aa4, u);
}
for (int i = 0; i < v; i++)
{
aa5[i] = Integer.parseInt(five[i]);
}
if (aa5[1] == aa5[3] - 2)
{
findmissing(aa5, v);
}
in.close();
}
public static void findmissing(int[] bb, int value)
{
for (int i = 0; i < value - 1; i++)
{
if (bb[i] == bb[i + 1] - 1)
{
} else {
System.out.println(bb[i + 1] - 1);
}
}
}