首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找唯一的9位数字

查找唯一的9位数字
EN

Stack Overflow用户
提问于 2021-09-27 16:02:50
回答 2查看 80关注 0票数 0

我正在写一个程序,它接受一个9位数字作为输入,每个数字从1到9(即459876231),该程序获取该数字,然后找到具有相同数字的下一个最高数字。我拥有的代码可以工作,但只有当我将print语句放入for循环中时才能工作。

代码语言:javascript
复制
n = int(input("Please input a 9 digit number"))

n_str = str(n)  
n_str1 = str(n+1)

while n < 1000000000:

    for char in n_str:
        if not char in n_str1:
            n += 1
            n_str1 = str(n)
            print(n)

如果我将print语句放在不缩进的位置,程序将无法工作。将print语句放在这里还会显示程序在获得正确数字的过程中尝试的每个数字,而我只想显示最终的答案。为什么会发生这种情况?我尝试将n存储在一个全新的变量中,然后尝试在循环外打印,但得到的结果是一样的。

EN

回答 2

Stack Overflow用户

发布于 2021-09-27 16:07:07

这是因为如果执行n += 1n将是1,然后是2,3..,所以每次都需要打印n。如果在for之外打印n,它将只打印它的最后一个值。

票数 1
EN

Stack Overflow用户

发布于 2021-09-27 16:20:56

您的代码已修复为:

代码语言:javascript
复制
n = int(input("Please input a 9 digit number: "))
n_str = str(n)  
n_str1 = str(n+1)

while n < 1000000000:
    found = True
    for char in n_str:
        if not char in n_str1:
            n += 1
            n_str1 = str(n)
            found = False
            break

    if found:
        print(n)
        break

你的情况中有个bug

代码语言:javascript
复制
    for char in n_str:
        if not char in n_str1:

如果输入数字为333222323n_str1333222324,则数字校验char in n_str1将全部为true,结果为333222323

我发现LeetCode problem 31. Next Permutation和你的问题非常相似,而且已经有很多推荐的解决方案,大多数都比你的更有效。

此示例代码基于我的LeetCode答案:

代码语言:javascript
复制
nstr = input("Please input a 9 digit number: ")
nums = [int(c) for c in nstr]

l = len(nums) # length should be 9

for i in range(l-2, -1, -1):
    swap_idx, swap_n = None, None
    for j in range(i+1, l):
        if (nums[i] < nums[j]) and (not swap_n or (nums[j] < swap_n)):
            swap_idx, swap_n = j, nums[j]

    if swap_idx:
        tmp = nums[i]
        nums[i] = nums[swap_idx]
        nums[swap_idx] = tmp
        break

nums = nums[:i+1] + sorted(nums[i+1:])
print(''.join([str(i) for i in nums]))

通过测试:

代码语言:javascript
复制
Please input a 9 digit number: 459876231
459876312

Please input a 9 digit number: 333222323
333222332
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69349783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档