基本上,您可以做的不是所有排列,而是为数组中的每个值创建条件。例如,如果我们有一个 2,我们知道十个位置的小时应该是 2,但那时我们一个小时的位置只能是 3。如果我们有一个 1,那么我们知道我们一小时的一个点可以是 9。我们知道我们的十分钟点是 5,我们的最大分钟点是 9。createTime 显示了这些条件。如果 findMaxSpecific 在给定数组中找不到有效数字,则返回 -1。这样,如果我们得到一个由 createTime 返回的带有 -1 的数组,我们就知道时间是无效的。查看示例输出。
public static int[] createTime(int[] numbers)
{
int[] time = new int[4];
time[0] = findMaxSpecific(numbers, 2);
time[1] = time[0] == 2 ? findMaxSpecific(numbers, 3) : findMaxSpecific(numbers, 9);
time[2] = findMaxSpecific(numbers, 5);
time[3] = findMaxSpecific(numbers, 9);
return time;
}
public static int findMaxSpecific(int[] arr, int valToFind)
{
if(arr.length != 4)
return -1;
int numToFind = -1;
int indexToRemove = -1;
for(int i = 0; i < arr.length; i++)
{
if(arr[i] <= valToFind)
{
if(arr[i] > numToFind)
{
numToFind = arr[i];
indexToRemove = i;
}
}
}
if(indexToRemove == -1)
return -1;
arr[indexToRemove] = -1;
return numToFind;
}
最后,如果任何值返回为 -1,我们就知道我们得到的时间无效
例子
int[] time = new int[4];
int[] numbers = {1,2,3,4};
time = createTime(numbers);
System.out.println(time[0] + "" + time[1] + ":" + time[2] + "" + time[3]);
int[] numbers2 = {0,9,7,1};
time = new int[4];
time = createTime(numbers2);
System.out.println(time[0] + "" + time[1] + ":" + time[2] + "" + time[3]);
int[] numbers3 = {9,9,9,9};
time = new int[4];
time = createTime(numbers3);
System.out.println(time[0] + "" + time[1] + ":" + time[2] + "" + time[3]);
输出是
23:41
19:07
-19:-19 //invalid numbers