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
页: 1 [2] 3 4
查看完整版本: Python:每日一题 383