减少软件版本的算法?

2024-10-05 15:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的几个小时里,我一直在努力解决这个问题,自己也找不出解决办法。问题很简单:

In: 'subtract('1.1.5', 4)'
Out: '1.1.1'

In: 'subtract('1.1.5', 6)'
Out: '1.0.9'

In: 'subtract('1.0.0', 1)'
Out: '0.9.9'

In: 'subtract('1.14.5', 8)'
Out: '1.13.7'

In: 'subtract('1.10.10', 20)'
Out: '1.9.0'

我提出了一些非常复杂的算法来解决一个看起来很简单的复杂问题,有什么想法吗?你知道吗

这是我迄今为止尝试过的(并非适用于所有情况):

def subtract(version, sub):
  arrV = version.split('.')
  index = len(arrV) - 1
  sub = -abs(sub)

  while(sub < 0 and index >= 0):

    vLen = len(arrV[index])
    m = 10 ** (vLen - 1)
    i = int(arrV[index])

    if (i + sub < 0):
      arrV[index] = str(m - (abs(sub) % m))
      sub = int(sub / m)
    else:
      arrV[index] = str(i + sub)
      sub = 0

    index -= 1


  print(arrV)
  return '.'.join(arrV)



print(subtract('1.10.10', 5) == '1.10.5')
print(subtract('1.10.10', 12) == '1.9.8')
print(subtract('1.10.10', 10) == '1.10.0')
print(subtract('1.10.10', 1010) == '1.0.0')

Tags: in算法indexlenversionabsoutint