Algorithm 实施;“24小时时间”;使用数字数组
我最近在一次考试中被问到一个问题。 我将得到一个由4个数字组成的数组,使用它我必须构建尽可能大的24小时时间格式。 例如:如果输入数组是[1,3,5,2],答案将是“23:51”。 如果输入数组为[1,1,5,0],则答案为“15:10” 我试过了,确实成功了,但还很初级。我基本上必须为每个时间位置制作4个不同的数组,并与输入数组进行比较 使用任何语言(c、c#、objC或任何其他语言)实现的不同方法都会有很大帮助。我似乎无法理解我的逻辑Algorithm 实施;“24小时时间”;使用数字数组,algorithm,sorting,Algorithm,Sorting,我最近在一次考试中被问到一个问题。 我将得到一个由4个数字组成的数组,使用它我必须构建尽可能大的24小时时间格式。 例如:如果输入数组是[1,3,5,2],答案将是“23:51”。 如果输入数组为[1,1,5,0],则答案为“15:10” 我试过了,确实成功了,但还很初级。我基本上必须为每个时间位置制作4个不同的数组,并与输入数组进行比较 使用任何语言(c、c#、objC或任何其他语言)实现的不同方法都会有很大帮助。我似乎无法理解我的逻辑 找到最大的数字 如果合法,则将该数字放在前面(第一个位置
由于只有4个数字,我将生成所有可能的时间戳(即
4!
,即24
),对它们进行排序,并找到最大的有效时间戳
如何检查t
是否为有效的24小时时间戳
最多4位,即t
t mod 10000==0
- 最后两位数字(
)是有效的分钟值,即在t mod 100
[0-59]
- 前两位(
)是有效的小时值,即在t div 100
[0-23]
- a应介于0和2之间
- 如果a小于2,则b全部有效。 否则,b应为0到3
- c应该是从0到5
- d全部有效
- 生成后检查有效时间戳的步骤 或
- 使用它们生成
- 这不是完整的答案,只是@arun的补充部分。
为了检查有效的时间戳,我假设时间戳的形式是ab:cd,其中a,b,c,d是数字
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception {
int[] input = {1,2,6,7};
System.out.println(getLargestTime(input)+" is the largest time!");
}
public static String getLargestTime(int[] input) {
String largestTime = "00:00";
String str = input[0]+""+input[1]+""+input[2]+""+input[3];
List<String> times = new ArrayList<>();
permutation(str, times);
Collections.sort(times, Collections.reverseOrder());
for (String t: times) {
int hours = Integer.parseInt(t) / 100;
int minutes = Integer.parseInt(t) % 100;
if (hours < 24 && minutes < 60) {
if (hours < 10 && minutes < 10) {
largestTime = "0"+hours+":0"+minutes;
} else if (hours < 10) {
largestTime = "0"+hours+":"+minutes;
} else if (minutes < 10) {
largestTime = hours+":0"+minutes;
} else {
largestTime = hours+":"+minutes;
}
}
}
return largestTime;
}
public static void permutation(String str, List<String> list) {
permutation("", str, list);
}
private static void permutation(String prefix, String str, List<String> list) {
int n = str.length();
if (n == 0) list.add(prefix);
else {
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), list);
}
}
}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args)引发异常{
int[]输入={1,2,6,7};
System.out.println(getLargestTime(输入)+“是最大时间!”);
}
公共静态字符串getLargestTime(int[]输入){
字符串largestTime=“00:00”;
字符串str=input[0]+“”+input[1]+“”+input[2]+“”+input[3];
列表时间=新建ArrayList();
排列(str,次);
Collections.sort(times,Collections.reverseOrder());
for(字符串t:次){
整小时=整数。parseInt(t)/100;
int分钟=整数。parseInt(t)%100;
如果(小时<24和分钟<60){
如果(小时<10和分钟<10){
最大时间=“0”+小时+”:0”+分钟;
}否则,如果(小时<10){
最大时间=“0”+小时+”:“+分钟;
}否则,如果(分钟<10){
最大时间=小时+“:0”+分钟;
}否则{
最长时间=小时+“:”+分钟;
}
}
}
返回时间最长;
}
公共静态空置换(字符串str,列表列表){
排列(“”,str,list);
}
私有静态无效置换(字符串前缀、字符串str、列表){
int n=str.length();
如果(n==0)list.add(前缀);
否则{
对于(int i=0;i
我是否需要使用一些系统API来检查它是否是有效的时间戳?@RajOlive很简单,您不需要使用APIs 24:00最大值或等于00:00(最小值)?假设最大值为23:59