1. 检查是否存在满足条件的数字组合
1.1. 题目描述
给定一个正整数数组,检查数组中是否存在满足规则的数字组合
规则:A = B + 2C
1.2. 输入描述
第一行输出数组的元素个数。
接下来一行输出所有数组元素,用空格隔开。
1.3. 输出描述
如果存在满足要求的数,在同一行里依次输出规则里A/B/C的取值,用空格隔开。
如果不存在,输出0。
备注
数组长度在3-100之间。
数组成员为0-65535,数组成员可以重复,但每个成员只能在结果算式中使用一次。如:数组成员为[0, 0, 1, 5],0出现2次是允许的,但结果0 = 0 + 2 * 0是不允许的,因为算式中使用了3个0。
用例保证每组数字里最多只有一组符合要求的解。
1.4. 用例
输入
4
2 7 3 0
输出 7 3 2
说明 7 = 3 + 2 * 2
输入 3
1 1 1
输出 0
说明 找不到满足条件的组合
1.5. 题目解析
数组长度在3-100之间,且只有一组答案,写的糙一点也没问题
1.6. 代码
class Solution:
def __call__(self, nums: List[int]):
nums.sort()
for i, b in enumerate(nums):
for j, c in enumerate(nums[i + 1:], start=i + 1):
a = b + 2 * c
if a in nums[j + 1:]:
return [a, b, c]
a = c + 2 * b
if a in nums[j + 1:]:
return [a, b, c]
return 0
2. 解密犯罪时间
2.1. 题目描述
警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。
根据警察和线人的约定,为了隐蔽,该时间是修改过的,
解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。
每个出现数字都可以被无限次使用。
2.2. 输入描述
形如HH:SS字符串,表示原始输入。
2.3. 输出描述
形如HH:SS的字符串,表示推理处理的犯罪时间。
备注
1.可以保证现任给定的字符串一定是合法的。
例如,“01:35”和“11:08”是合法的,“1:35”和“11:8”是不合法的。
2.最近的时刻可能在第二天。
2.4. 用例
输入 输出
20:12 20:20
23:59 22:22
12:58 15:11
18:52 18:55
23:52 23:53
09:17 09:19
07:08 08:00
2.5. 题目解析
根据字面的数字,组合出一个离得最近的时间。排列组合最多也就4^4种,全部找出来然后算时间差或者排序了找最近都可以。
2.6. 代码
class Solution:
def get_time(self, time: str):
time = list(set(time))
for a in time:
for b in time:
if int(a + b) >= 24:
continue
for c in time:
for d in time:
if int(c + d) >= 60:
continue
yield a + b + c + d
def __call__(self, time: str):
times = [_time for _time in self.get_time(time)]
times.sort()
pos = times.index(time)
return times[pos + 1]