OC逆波蘭表達式

逆波蘭表達式又叫做后綴表達式,特點是先把數(shù)字放在前面,運算符號放在后面,數(shù)字都是整數(shù),比如:["4", "13", "5", "/", "+"] 計算方法是4+13/5 = 6;

該題目在力扣是第150題,地址是 https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/

下面介紹用oc改怎么做這道題,由于oc不能像java一樣有Stack這個對象,所以只能通過array來實現(xiàn)。

原理

利用棧的push 與pop原理,把遍歷到的數(shù)字push到棧中,當(dāng)遇到運算符的時候,pop出最后兩個進行計算,把最新的值push到棧中,如此循環(huán)直到結(jié)束。注意:pop出來的數(shù)字,第一個是運算符右邊的數(shù)字,第二個是運算符左邊的數(shù)字,在做減法和乘法是這個順序不能亂。好,現(xiàn)在上代碼

代碼
一,創(chuàng)建一個類 PolishReverse


#import PolishReverse : NSObject

NS_ASSUME_NONNULL_BEGIN

@interface PolishReverse : NSObject

- initWithPolishArray:(NSArray *)array;

//最后計算的結(jié)果

- (NSInteger)getResult;

@end
#import "PolishReverse.h"

@interface PolishReverse ()

/**存放數(shù)字的數(shù)組*/

@property (nonatomic ,strong) NSMutableArray *stack;

@end

@implementation PolishReverse

- initWithPolishArray:(NSArray *)array{

  if(self = [super init]) {

    [self operatorArray:array];

  }

  return self;

}

- (void)operatorArray:(NSArray*)array{

  self.stack = [NSMutableArray array];

  for(NSString*strinarray) {

    if([str isEqualToString:@"+"]) {

      [self push:[self pop]+[self pop]];

    }else if([str isEqualToString:@"-"]) {

      [self push:-[self pop]+[self pop]];

    }else if([str isEqualToString:@"*"]) {

      [self push:[self pop]*[self pop]];

    }else if([str isEqualToString:@"/"]) {

      NSInteger right = [self pop];

      [self push:[self pop]/right];

    }else{

      NSInteger num = [str integerValue];

      [self push:num];

    }
  }

}

- (void)push:(NSInteger)number{

   [self.stackaddObject:@(number)];

}

- (NSInteger)pop{

  NSInteger lastNum = [self.stack.lastObject integerValue];

  [self.stack removeLastObject];

  returnlastNum;

}

- (NSInteger)getResult{

  return [self.stack.lastObject integerValue];

}

@end

二,調(diào)用

#import "ViewController.h"

#import "PolishReverse.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

  [super viewDidLoad];

  PolishReverse *p = [[PolishReverse alloc] initWithPolishArray:@[@"4", @"13", @"5", @"/", @"+"]];

  NSLog(@"%ld",[p getResult]);

}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容