在 Python 中查找通过删除数字最少位数形成的最大立方体


假设我们有一个数字 N,我们必须确定可以通过从数字中删除最少位数(可能是 0)生成的最大的完全立方体。我们可以删除给定数字中的任何数字以达到目标。众所周知,如果 N = M^3 对于某个整数 M,则数字 N 被称为完全立方体。

因此,如果输入类似于 806,则输出将为 8,因为我们可以从数字中删除 0 和 6,然后我们将得到 8,这是 2 的完全立方体。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数 preProcess() 。这将接收 n
  • temp_cubes := 一个新的列表
  • 对于 i 从 1 到 n^(1/3) 的上界,执行以下操作:
    • cube = i^3
    • cubeString := cube 转换为字符串
    • 将 cubeString 插入到 temp_cubes 的末尾
    • 返回 temp_cubes
  • 定义一个函数 solve() 。这将接收 num 和 temp_cubes
  • 反转 temp_cubes
  • totalCubes := temp_cubes 的大小
  • 对于 i 从 0 到 totalCubes,执行以下操作:
    • temp := temp_cubes[i]
    • digitsInCube := temp 的大小
    • index := 0
    • digitsInNumber := num 的大小
    • 对于 j 从 0 到 digitsInNumber,执行以下操作:
      • 如果 num[j] 与 temp[index] 相同,则
        • index := index + 1
      • 如果 digitsInCube 与 index 相同,则
        • 返回 temp
  • 返回“不可能”
  • 从方法中执行以下操作:
  • temp_cubes := preProcess(n)
  • num := n 转换为字符串
  • ans := solve(num, temp_cubes)
  • 返回 ans

示例

让我们看看以下实现以更好地理解:

import math
def preProcess(n):
   temp_cubes = list()
   for i in range(1, math.ceil(n**(1. / 3.))):
      cube = i**3
      cubeString = str(cube)
      temp_cubes.append(cubeString)
   return temp_cubes
def solve(num,temp_cubes):
   temp_cubes = temp_cubes[::-1]
   totalCubes = len(temp_cubes)
   for i in range(totalCubes):
      temp = temp_cubes[i]
      digitsInCube = len(temp)
      index = 0
      digitsInNumber = len(num)
      for j in range(digitsInNumber):
      if (num[j] == temp[index]):
         index += 1
      if (digitsInCube == index):
         return temp
   return "Not Possible"
def getLargestCube(n):
   temp_cubes = preProcess(n)
   num = str(n)
   ans = solve(num, temp_cubes)
   return ans
n = 806
print(getLargestCube(n) )

输入

806

输出

8

更新于: 2020-08-27

106 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告