火柴像这样组成0~9的数字, ,
现在你面前有一个由火柴棒组成的数字。
请找出通过移动一根火柴棒(即移走一根火柴棒并把它放在不同的位置上)可以从这个数组成的所有数。
但是,只应考虑上图中 0 到 9 所组成的数字,而不能用火柴棒代替减号等。
例如,从 16 开始恰好移动一根火柴棒,就可以组成三个不同的数字:10、19 和 75。
输入就是一个数字 s
长度1~10之间
将添加1,减少1,移动1的每个数字的每种情况组成一个字典。
data_dict = {
"0": {
"add_1": ["8"],
"sub_1": [],
"move_1": ["6", "9"],
},
"1": {
"add_1": ["7"],
"sub_1": [],
"move_1": [],
},
"2": {
"add_1": [],
"sub_1": [],
"move_1": ["3"],
},
"3": {
"add_1": ["9"],
"sub_1": [],
"move_1": ["5"]
},
"4": {
"add_1": [],
"sub_1": [],
"move_1": [],
},
"5": {
"add_1": ["6", "9"],
"sub_1": [],
"move_1": ["3"],
},
"6": {
"add_1": ["8"],
"sub_1": ["5"],
"move_1": ["9"]
},
"7": {
"add_1": [],
"sub_1": ["1"],
"move_1": [],
},
"8": {
"add_1": [],
"sub_1": ["6", "9", "0"],
"move_1": [],
},
"9": {
"add_1": ["8"],
"sub_1": ["3", "5"],
"move_1": ["0", "6"],
},
}
实现了一个初步版本的算法如下:
data_dict = {
"0": {
"add_1": ["8"],
"sub_1": [],
"move_1": ["6", "9"],
},
"1": {
"add_1": ["7"],
"sub_1": [],
"move_1": [],
},
"2": {
"add_1": [],
"sub_1": [],
"move_1": ["3"],
},
"3": {
"add_1": ["9"],
"sub_1": [],
"move_1": ["5", "2"]
},
"4": {
"add_1": [],
"sub_1": [],
"move_1": [],
},
"5": {
"add_1": ["6", "9"],
"sub_1": [],
"move_1": ["3"],
},
"6": {
"add_1": ["8"],
"sub_1": ["5"],
"move_1": ["9", "0"]
},
"7": {
"add_1": [],
"sub_1": ["1"],
"move_1": [],
},
"8": {
"add_1": [],
"sub_1": ["6", "9", "0"],
"move_1": [],
},
"9": {
"add_1": ["8"],
"sub_1": ["3", "5"],
"move_1": ["0", "6"],
},
}
def get_move1_results(data_input):
data_output = []
for i in data_input:
move_arr = data_dict.get(i).get("move_1")
for mi in move_arr:
data_output.append(data_input.replace(i, mi))
if len(data_input) > 0:
return data_output
def get_add1_sub1_results(data_input):
data_output = []
for i in range(len(data_input)):
ki = data_input[i]
add_arr = data_dict.get(ki).get("add_1")
if len(add_arr) == 0:
continue
for j in range(len(data_input)):
if i == j:
continue
kj = data_input[j]
sub_arr = data_dict.get(kj).get("sub_1")
if len(sub_arr) == 0:
continue
for addv in add_arr:
for subv in sub_arr:
tmp = list(data_input)
tmp[i] = addv
tmp[j] = subv
tmp = "".join(tmp)
# print("tmp", tmp)
# tmp = tmp.replace(i, addv)
# print("tmp", tmp)
# tmp = tmp.replace(j, subv)
# print("tmp", tmp)
data_output.append(tmp)
if len(data_input) > 0:
return data_output
def alg(data_input):
data_output = []
move1 = get_move1_results(data_input)
if move1:
data_output.extend(move1)
add1_sub1 = get_add1_sub1_results(data_input)
if add1_sub1:
data_output.extend(add1_sub1)
if len(data_output) > 0:
data_output = list(set(data_output))
data_output.sort()
return data_output
if __name__ == '__main__':
test_data = [
"16",
"888",
"01234567",
]
for tt in test_data:
print(alg(tt))
三个测试用例都能通过,但是更多的示例需要进一步测试:
上面的代码可能不符合刷题网站的输出要求,改写如下:
data_dict = {
"0": {
"add_1": ["8"],
"sub_1": [],
"move_1": ["6", "9"],
},
"1": {
"add_1": ["7"],
"sub_1": [],
"move_1": [],
},
"2": {
"add_1": [],
"sub_1": [],
"move_1": ["3"],
},
"3": {
"add_1": ["9"],
"sub_1": [],
"move_1": ["5", "2"]
},
"4": {
"add_1": [],
"sub_1": [],
"move_1": [],
},
"5": {
"add_1": ["6", "9"],
"sub_1": [],
"move_1": ["3"],
},
"6": {
"add_1": ["8"],
"sub_1": ["5"],
"move_1": ["9", "0"]
},
"7": {
"add_1": [],
"sub_1": ["1"],
"move_1": [],
},
"8": {
"add_1": [],
"sub_1": ["6", "9", "0"],
"move_1": [],
},
"9": {
"add_1": ["8"],
"sub_1": ["3", "5"],
"move_1": ["0", "6"],
},
}
def get_move1_results(data_input):
data_output = []
for i in data_input:
move_arr = data_dict.get(i).get("move_1")
for mi in move_arr:
data_output.append(data_input.replace(i, mi))
if len(data_input) > 0:
return data_output
def get_add1_sub1_results(data_input):
data_output = []
for i in range(len(data_input)):
ki = data_input[i]
add_arr = data_dict.get(ki).get("add_1")
if len(add_arr) == 0:
continue
for j in range(len(data_input)):
if i == j:
continue
kj = data_input[j]
sub_arr = data_dict.get(kj).get("sub_1")
if len(sub_arr) == 0:
continue
for addv in add_arr:
for subv in sub_arr:
tmp = list(data_input)
tmp[i] = addv
tmp[j] = subv
tmp = "".join(tmp)
# print("tmp", tmp)
# tmp = tmp.replace(i, addv)
# print("tmp", tmp)
# tmp = tmp.replace(j, subv)
# print("tmp", tmp)
data_output.append(tmp)
if len(data_input) > 0:
return data_output
def alg(data_input):
data_output = []
move1 = get_move1_results(data_input)
if move1:
data_output.extend(move1)
add1_sub1 = get_add1_sub1_results(data_input)
if add1_sub1:
data_output.extend(add1_sub1)
if len(data_output) > 0:
data_output = list(set(data_output))
data_output.sort()
return data_output
if __name__ == '__main__':
data_input = input()
data_output = alg(data_input)
if data_output:
for v in data_output:
print(v)
else:
print("none")