在 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
- 如果 num[j] 与 temp[index] 相同,则
- 返回“不可能”
- 从方法中执行以下操作:
- 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
广告