●出栈合法问题:都知道栈遵守"先进后出"原则,有n个数字,按照1到n的顺序依次进栈。假设n为5,那么出栈顺序(1, 2, 3, 4, 5)是可能的,顺序(1,4,2, 3, 5)是不可能的。给你数据要求输出,是否是可能的结果。
数据样例如下:
1,2,3,4,5
打印结果: YES
1,4,2,3,5
打印结果: NO
使用OC语言方案如下:
-(BOOL)getResult:(NSArray *)dataArr{
NSArray * orderDatas = @[@"1",@"2",@"3",@"4",@"5"];
//栈内元素-只和栈内最后一条比较
NSMutableArray * muArr = [NSMutableArray array];
//出栈数据
NSMutableArray * goOutArr = [NSMutableArray array];
NSInteger i = 0;
for (NSString * data in dataArr) {
BOOL comeOn = YES;
while (comeOn) {
NSString * enterStr = @"";
if (i < orderDatas.count) {
enterStr = orderDatas[I];
}
if (i == 0) {
[muArr addObject:enterStr];
comeOn = YES;
}else{
NSString * enterLast = muArr.lastObject;
if (data.intValue == enterLast.intValue) {
[muArr removeObject:enterLast];
[goOutArr addObject:enterLast];
comeOn = NO;
}else{
if (enterStr.length > 0) {
[muArr addObject:enterStr];
comeOn = YES;
}else{
comeOn = NO;
}
}
}
if (comeOn == YES) {
I++;
}
}
}
if (goOutArr.count == 5) {
return YES;
}else{
return NO;
}
}
思路如下:

网友评论