出栈方式

堆栈有元素abcdef,每次出栈可以一个或者两个元素,当两个元素出栈时可以选择其中一个重新入栈,当所有元素为空时,出栈方式有多少种?
有哪位大神知道这道题怎么做吗??
全部评论
问题等价于可以取出栈顶元素或者栈顶第二个元素 共有多少个出栈序列 这里认为栈内元素没有重复 记dp[i]为有i个元素的栈的出栈序列数 则dp[1] = 1 dp[i]=dp[i-1]+dp[i-1](对应两种出栈方式) 所以dp[i]=2^(i-1)
2 回复 分享
发布于 2017-09-13 01:20
能不能这么想,栈里有n个元素,出栈方式的数目记为f(n),第一次出栈有两种方式:一是出一个元素,此时出栈方式的数目等于剩下n-1个元素的出栈方式数,即f(n-1);二是出两个元素,这个时候可以选择不入栈和任选一个元素入栈,任选一个元素入栈时为f(n-1),不入栈时为f(n-2),所以最终的f(n) = 2f(n-1)+f(n-2).
点赞 回复 分享
发布于 2017-09-13 10:03
作者:璐璐 链接:https://www.nowcoder.com/discuss/67377 标题 : 2018秋招阿里巴巴java笔试试题 来源:牛客网 4、堆栈中有元素abcdef,每次出栈可以选择一个或者两个元素栈,当有两个元素出栈时可以选择其中一个重新入栈,则所有元素为空,那么可能的出栈方式有( )种? A.23 B.22 C.21 D.20 E.19 F.18 参考答案:C
1 回复 分享
发布于 2019-03-20 00:05
import random sum = set() for i in range(0,20000): stack = [] for i in range(1,7): stack.append(i) order = [] while stack: # print(stack) x = stack.pop(-1) order.append(x) if len(stack)>0: if random.randint(0,1) == 1: y = stack.pop(-1) order.append(y) t = random.randint(0,2) if t == 0: stack.append(x) if t == 1: stack.append(y) order = order[::-1] res = [] for i in order: if i not in res: res.append(i) num = 0 for i in res: num = 10*num + i sum.add(int(str(num)[::-1])) sum = (list(sum)) sum.sort(reverse=True) print(sum) print(len(sum))我甚至暴力(相当暴力)搜索了一遍结果是[654321, 654312, 654231, 654213, 653421, 653412, 653241, 653214, 645321, 645312, 645231, 645213, 643521, 643512, 643251, 643215, 564321, 564312, 564231, 564213, 563421, 563412, 563241, 563214, 546321, 546312, 546231, 546213, 543621, 543612, 543261, 543216]32
点赞 回复 分享
发布于 2019-03-20 02:05
 同问这个问题,感觉是32
点赞 回复 分享
发布于 2019-03-20 00:03
2^5
点赞 回复 分享
发布于 2017-09-13 01:20
有81这个答案吗?
点赞 回复 分享
发布于 2017-09-13 00:16
求题解
点赞 回复 分享
发布于 2017-09-12 23:57
卡特兰数 C(2n,n)-C(2n,n-1)
点赞 回复 分享
发布于 2017-09-12 23:41

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务