Skip to content

Commit 3dda267

Browse files
committed
2024-10-01 v. 6.7.2: added "227. Basic Calculator II"
1 parent e1da825 commit 3dda267

File tree

4 files changed

+72
-1
lines changed

4 files changed

+72
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,3 +537,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
537537
| 208. Implement Trie (Prefix Tree) | [Link](https://leetcode.com/problems/implement-trie-prefix-tree/) | [Link](./lib/medium/208_implement_trie_prefix_tree.rb) | [Link](./test/medium/test_208_implement_trie_prefix_tree.rb) |
538538
| 209. Minimum Size Subarray Sum | [Link](https://leetcode.com/problems/minimum-size-subarray-sum/) | [Link](./lib/medium/209_minimum_size_subarray_sum.rb) | [Link](./test/medium/test_209_minimum_size_subarray_sum.rb) |
539539
| 215. Kth Largest Element in an Array | [Link](https://leetcode.com/problems/kth-largest-element-in-an-array/) | [Link](./lib/medium/215_kth_largest_element_in_an_array.rb) | [Link](./test/medium/test_215_kth_largest_element_in_an_array.rb) |
540+
| 227. Basic Calculator II | [Link](https://leetcode.com/problems/basic-calculator-ii/) | [Link](./lib/medium/227_basic_calculator_ii.rb) | [Link](./test/medium/test_227_basic_calculator_ii.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.7.1'
8+
s.version = '6.7.2'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# frozen_string_literal: true
2+
3+
# @param {String} s
4+
# @return {Integer}
5+
def calculate(s)
6+
stack = []
7+
curr = 0
8+
op = '+'
9+
10+
s.each_char do |c|
11+
if c.match?(/[0-9]/)
12+
curr = curr * 10 + c.to_i
13+
elsif c != ' '
14+
stack.push(
15+
perform_operation(
16+
stack,
17+
op,
18+
curr
19+
)
20+
)
21+
22+
curr = 0
23+
op = c
24+
end
25+
end
26+
27+
stack.push(
28+
perform_operation(
29+
stack,
30+
op,
31+
curr
32+
)
33+
)
34+
35+
stack.sum
36+
end
37+
38+
private
39+
40+
# @param {Array} stack
41+
# @param {String} op
42+
# @param {Integer} num
43+
# @return {Integer}
44+
def perform_operation(stack, op, num)
45+
case op
46+
when '+'
47+
num
48+
when '-'
49+
-num
50+
when '*'
51+
stack.pop * num
52+
when '/'
53+
(stack.pop.to_f / num).to_i
54+
end
55+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/227_basic_calculator_ii'
5+
require 'minitest/autorun'
6+
7+
class BasicCalculatorIITest < ::Minitest::Test
8+
def test_default_one = assert_equal(7, calculate('3+2*2'))
9+
10+
def test_default_two = assert_equal(1, calculate(' 3/2 '))
11+
12+
def test_default_three = assert_equal(5, calculate(' 3+5 / 2 '))
13+
14+
def test_additional_one = assert_equal(1, calculate('2-1'))
15+
end

0 commit comments

Comments
 (0)