Python3005
发表于 2020-4-24 01:02:18
本帖最后由 Python3005 于 2020-4-24 01:03 编辑
import itertools
def fun(num, k):
if len(num) == k:
return 0
result = []
for each in itertools.combinations(range(len(num)), len(num) - k):
result.append(''.join(num for x in each))
return min(result)
旅途Z
发表于 2020-4-24 01:02:35
本帖最后由 旅途Z 于 2020-4-26 23:56 编辑
已修改。。def get_max_num(num_str, k):
if len(num_str) == k:
return 0
j = 0
while j < len(num_str)-1:
if k == 0:
break
if int(num_str) > int(num_str):
num_str = num_str.replace(num_str, "", 1)
if j != 0:
j -= 1
k -= 1
else:
j += 1
else:
for i in range(k):
num_str = num_str.replace(num_str[-1], "", 1)
return int(num_str)
sjtuszy
发表于 2020-4-24 01:13:34
本帖最后由 sjtuszy 于 2020-4-24 11:57 编辑
def fun383(num, k):
if len(num) <= k:
return '0'
from itertools import compress as com
list_final, i = *len(num), 0
while i < len(num)-k:
list_0, list_num = [], []
for index, n in enumerate(list_final):
if n == 0:
list_0.append(index)
for ii in list_0:
list_iter = list_final[:ii] + + list_final
num_iter = int(''.join(com(num, list_iter)))
list_num.append(num_iter)
if num_iter == min(list_num):
list_temp = list_iter
list_final = list_temp
i += 1
return str(min(list_num))
王西西
发表于 2020-4-24 02:17:04
学到了!
chenyumrx
发表于 2020-4-24 09:06:40
为什么我怎么都不会呢?
kinkon
发表于 2020-4-24 09:32:49
fan1993423 发表于 2020-4-23 20:12
如果字符串有前导‘0’,会一直和‘0’比较,建议循环过程中先去掉前导‘0’
bhxdmdxzz
发表于 2020-4-24 10:23:08
我来了
fan1993423
发表于 2020-4-24 11:02:53
kinkon 发表于 2020-4-24 09:32
如果字符串有前导‘0’,会一直和‘0’比较,建议循环过程中先去掉前导‘0’
谢谢,已改
钙硼钡锗
发表于 2020-4-24 13:07:01
本帖最后由 钙硼钡锗 于 2020-4-24 13:08 编辑
def f383(n,k):
nn=list(n)
a=0
while k>0 and len(nn)>1:
if nn>nn :
nn.pop(a)
k-=1
else:a+=1
if a+2>len(nn):a=0
print(int(''.join(nn)))
Chysial
发表于 2020-4-24 16:34:55
先占楼
感觉原理很简单啊:
1.选取里边的最小值,判断那个数值后边的位数是否满足len()-k-n就可以取出来;
2.然后剔除取数的前边数值,取第二个,依次类推;
不知道思路对吗?
NAMELESSONE
发表于 2020-4-24 20:26:22
def solve(num ,k):
nums = list(num)
num = []
for i in nums:
num.append(int(i))
if len(num) <= k:
return 0
for i in range(k):
for j in range(len(num) - 1):
if num > num:
num.remove(num)
break
if j == len(num) - 2:
num.remove(max(num))
res = ''
for i in num:
res += str(i)
return str(int(res))
小十九
发表于 2020-4-24 23:02:51
本帖最后由 小十九 于 2020-4-24 23:09 编辑
def Q383(num,k):
if k >= len(num):
return '0'
rnum = []
for b in range(len(num)-k):
rnum.append("".join((num,num)))
minnum = int(num)
for i in rnum:
minnum = min(minnum,int(i))
return str(minnum)
if __name__ == '__main__':
num = input('请输入一组数字: ')
k = int(input('请输入需要移除的位数: '))
print(Q383(num,k))
archlzy
发表于 2020-4-24 23:23:10
本帖最后由 archlzy 于 2020-4-24 23:57 编辑
def fun383(string, k):
def _short(string,k):
while True:
index_0 = string.index('0')
if index_0 > k:
break
k -= index_0#new k
string = str(int(string))
if '0' not in string:
break
if k ==0:
break
return (string, k)
def _calc(string,k):
count = 0
while k:
for i in range(count, len(string)-1):
if string < string:
string = string[:i] + string
count = (i-1) if i >0 else 0
k-=1
if k == 0:
return string
break
else:
return string[:-k]
temp_str = string
temp_k = k
temp_str, temp_k= _short(temp_str,temp_k)
if temp_k==0:
return temp_str
return _calc(temp_str, temp_k)
def fun383_1(string,k):
count = 0
while True:
if string == '0':
string = str(int(string))
if k ==0:
return string
for i in range(count, len(string)-1):
if string < string:
string = string[:i] + string
count = (i-1) if i >0 else 0
k-=1
break
else:
return string[:-k]
兔子BUNNY
发表于 2020-4-25 19:30:26
def q383(num,k):
a=[]
d=[]
if len(num) <=k:
print(0)
return 0
for i in num:
a.append(int(i))
while k > 0 :
Min=min(a[:k+1])
b = a.index(Min)
del a[:b]
d.append(a)
del a
k -= b
if k==0:
d.extend(a)
for i in range(len(d)):
if i == 0:
result = d[-1]
else:
result += d[-(i+1)]*(10**i)
print(str(result))
q383("10200",1)
大佬看看啊,没见过递归的小白的屑作
zltzlt
发表于 2020-4-26 13:27:02
kinkon 发表于 2020-4-23 18:55
原地修改字符串
转列表修改
第一种方法 249 ms,第二种方法 533 ms
zltzlt
发表于 2020-4-26 13:27:42
KevinHu 发表于 2020-4-23 19:09
输入示例 1 中的数据结果有误
zltzlt
发表于 2020-4-26 13:28:41
本帖最后由 zltzlt 于 2020-4-26 13:30 编辑
xiangjianshinan 发表于 2020-4-23 19:27
解答错误
输入:num = '112', k = 1
输出:'12'
预期结果:'11'
zltzlt
发表于 2020-4-26 13:29:36
TJBEST 发表于 2020-4-23 19:45
3831 ms
zltzlt
发表于 2020-4-26 13:30:43
fan1993423 发表于 2020-4-23 20:12
解答错误
输入:num = '1173', k = 2
输出:'13'
预期结果:'11'
zltzlt
发表于 2020-4-26 13:34:50
March2615 发表于 2020-4-23 20:23
大家都好快,越来越多人参与了,是好事啊
最后的判断也太难了,疯狂补漏的感觉
36 ms