|
发表于 2019-11-23 20:50:35
|
显示全部楼层
我改变了一下思路,从末位开始考虑,用字典哈希会不会快一点
- def f279(num):
- st = str(num)
- le = len(st)
- d = {i: st[i] for i in range(len(st))}
- def 交换(f, l: dict):
- flag = f - 1
- for i in range(flag - 1, -1, -1):
- if l[i] > l[f - 1]:
- l[i], l[f - 1] = l[f - 1], l[i]
- if l[0] != "0":
- return (i + 1, l)
- else:
- if flag == -1: # 调用递归之前看看有无必要
- return -1
- return 交换(flag, l)
- r = 交换(le, d)
- if r == -1: # -1就是不符合情况
- return -1
- temp1_count = 0
- temp1 = []
- while temp1_count < r[0]:
- temp1.append(r[1][temp1_count])
- temp1_count += 1
- temp2_count = r[0]
- temp2 = []
- while temp2_count <= le - 1:
- temp2.append(r[1][temp2_count])
- temp2_count += 1
- temp2.sort(reverse=True)
- temp1.extend(temp2)
- return int(''.join(temp1))
复制代码 |
|