156 / 205
LeetCode · HardQiyin30 ball· ~45 daqiqa

Basic Calculator

Sizga ifoda yozilgan s satri berilgan. Ifoda musbat butun sonlar, +, -, (, ) va bo'sh joylardan ( ) iborat. Ushbu ifodani hisoblab, natijasini qaytaring.

Natija 32-bitli butun son chegarasida bo'lishi kafolatlanadi. Tayyor eval() kabi funksiyalardan foydalanmang.

example.go
func solve(s string) int {
    // ...
}

Misollar

kod
Input: s = "(1+(4+5+2)-3)+(6+8)"
Output: 23
Tushuntirish:
(1+11-3)+14 = 9+14 = 23
kod
Input: s = "1 + 1"
Output: 2
kod
Input: s = " 2-1 + 2 "
Output: 3

Maslahatlar

  1. Ifodani chapdan o'ngga bitta o'tishda o'qib chiqing va joriy natija bilan joriy ishorani alohida o'zgaruvchilarda saqlang; qavslarni to'g'ri hisoblash uchun stek (stack) tuzilmasidan foydalanishni o'ylab ko'ring.
  2. Har bir belgini o'qiganda: raqam bo'lsa uni yig'ing, +/- uchrasa joriy sonni ishora bilan natijaga qo'shib ishorani yangilang. ( uchraganda joriy natija va ishorani stekka joylab ularni nolga qaytaring; ) uchraganda ichki natijani hisoblab, stekdan chiqargan qiymatlar yordamida tashqi natijaga qo'shing.