在Python中查找最接近n的所有数字都是奇数的数字
假设我们有一个数字n,我们必须找到下一个最接近的所有数字都是奇数的值。当有两个值同时最接近n时,请返回较大的值。
因此,如果输入为n = 243,则输出将为199。
要解决此问题,请按如下步骤操作−
- first_even := -1
- s := 将n转换为字符串
- l := s的长度
- 对于i在0到l的范围内,执行以下操作
- 如果s[i]是偶数,则
- first_even := i
- 退出循环
- 如果s[i]是偶数,则
- 如果first_even与-1相同,则
- 返回n
- big := s [索引0到i的数字值] + 1
- 如果s[i]等于”0″,则
- 如果s[i – 1]等于”1″,则
- small := s [从索引0到i的数字值] – 1
- 否则,
- small := s [从索引0到i的数字值] – 11
- 如果s[i – 1]等于”1″,则
- 否则,
- small := s [从索引0到i的数字值] – 1
- 对于i在i + 1到l的范围内,执行以下操作
- big := big连接”1″
- small := small连接”9″
- big := big的数字值,small := small的数字值
- d2 := big – n,d1 := n – small
- 如果d1<d2,则
- 返回 small
- 否则,当d1≥d2时,则
- 返回big
请看以下实现以更好地理解−
更多Python相关文章,请阅读:Python 教程
示例
class Solution:
def solve(self, n):
first_even = -1
s = str(n)
l = len(s)
for i in range(l):
if int(s[i]) % 2 == 0:
first_even = i
break
if first_even == -1:
return n
big = str(int(s[: i + 1]) + 1)
if s[i] == "0":
if s[i - 1] == "1":
small = str(int(s[: i + 1]) - 1)
else:
small = str(int(s[i : i + 1]) - 11)
else:
small = str(int(s[: i + 1]) - 1)
for i in range(i + 1, l):
big += "1"
small += "9"
big, small = int(big), int(small)
d2 =big - n, d1 = n - small
if d1 < d2:
return small
elif d1 >= d2:
return big
ob = Solution()
n = 243
print(ob.solve(n))
输入
243
输出
199