lav甜甜 2021-11-12 11:24 采纳率: 42.9%
浏览 45
已结题

python数字重排(用栈实现)

题目要求:
输入:两行,第一行为一列数字的长度 n,第二行为希望得到的新序列,该列表保证
长度为 n,由 1-n 组成。
输出:如果能得到另一种给定的排列,则输出两行,第一行为 Yes,第二行为由 01
串表示的入栈出栈操作顺序,0 表示入栈,1 表示出栈。如果不能,输出 No。
输入样例:
5
3 5 4 2 1
输出样例:
Yes
0001001111
问题:我的代码输出为No
代码:

n=int(input())
list2=map(int,input().split())
stack=[]
ans=''
num=0

for i in list2:
    if stack==[]:
        while  num<i:
           num+=1
           stack.append(num)
        c=num
        num=i
        while c>=1:
            ans=ans+'0'
            c-=1
        stack.pop()
        ans=ans+'1'
    else:
        if stack[-1]==i:
            stack.pop()
            ans=ans+'1'
        elif stack[-1]<i:
            d=num
            while  num<i:
                num+=1
                stack.append(num)
            c=num
            num=i
            while c>=1:
                ans=ans+'0'
                c-=1
            stack.pop()
            ans=ans+'1'
        else:
            break
if len(ans)==2*n:
    print('Yes\n',format(ans),sep='')
else:
    print('No')

麻烦帮忙看看问题在哪~该怎么改 感谢!

  • 写回答

1条回答 默认 最新

  • 自渡     2021-11-12 12:27
    关注
    
    # -*- encoding: utf-8 -*-
    """
    @File    :   test.py    
    
    @Modify Time          @Version    @Description
    ------------          --------    -----------
    2021/8/24 2:11 下午         1.0         None
    """
    
    # import lib
    n = int(input())
    list2 = map(int, input().split())
    stack = []
    ans = ''
    num = 0
    for i in list2:
        print("i===", i)
        if stack == []:
            while num < i:
                num += 1
                stack.append(num)
            c = num
            num = i
            while c >= 1:
                ans = ans + '0'
                c -= 1
            stack.pop()
            ans = ans + '1'
        else:
            if stack[-1] == i:
                stack.pop()
                ans = ans + '1'
            elif stack[-1] < i:
                d = num
                while num < i:
                    num += 1
                    stack.append(num)
                c = d
                num = i
                while c > 1:
                    ans = ans + '0'
                    c -= 1
                stack.pop()
                ans = ans + '1'
            else:
                break
    if len(ans) == 2 * n:
        print('Yes\n', format(ans), sep='')
    else:
        print('No')
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月20日
  • 已采纳回答 11月12日
  • 创建了问题 11月12日

悬赏问题

  • ¥20 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏