题目
三合一。描述如何只用一个数组来实现三个栈。
你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。
构造函数会传入一个stackSize参数,代表每个栈的大小。
示例1:
输入:
1 | ["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"] |
输出:
1 | [null, null, null, 1, -1, -1, true] |
示例2:
输入:
1 | ["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"] |
思路
一开始直接懵逼,看了别人的才懂题意
首先开始创建类时构造函数里面创入的大小是栈的大小 ( stackSize )
其次不管是push还是pop还是peek或者isEmpty 的参数 (stackNum)
- stackNum输入的值,代表的是哪个栈!!!!
- 这个题叫三合一就是说 三个栈代表全部放在一个数组里面
- 例如: 参数stackNum 为 0 时就代表第一个栈
- 参数stackNum 为 1 时就代表第二个栈
- 参数stackNum 为 2 时就代表第三个栈
由于是一个数组相当于3个栈,所以创建的时候就 乘 3
每次push的时候 需要先判断头指针是否小于数组的长度
- 如果小于需要添加值,而且需要把top节点加3
- 例如: 添加栈0 2, 添加栈0 8, 添加栈0 7
此时top[0] = 0 减3之后就是 -3 所以它是空的返回-1
每次peek的时候, 先判断是否为空 空直接返回-1, 不为空话就把top – 3 的下标给它就可以了,此时不是抛出所以不需要改变原来的top的值
参考代码:
1 | class TripleInOne { |