From 3dda2671d470c624dd946c8929796e8b1b5534f8 Mon Sep 17 00:00:00 2001 From: fartem Date: Tue, 1 Oct 2024 08:56:52 +0300 Subject: [PATCH 1/2] 2024-10-01 v. 6.7.2: added "227. Basic Calculator II" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/227_basic_calculator_ii.rb | 55 +++++++++++++++++++++ test/medium/test_227_basic_calculator_ii.rb | 15 ++++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 lib/medium/227_basic_calculator_ii.rb create mode 100644 test/medium/test_227_basic_calculator_ii.rb diff --git a/README.md b/README.md index d5f1d81d..e2fcf25a 100644 --- a/README.md +++ b/README.md @@ -537,3 +537,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 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) | | 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) | | 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) | +| 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) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index e52158a3..efd990a1 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '6.7.1' + s.version = '6.7.2' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/227_basic_calculator_ii.rb b/lib/medium/227_basic_calculator_ii.rb new file mode 100644 index 00000000..57ffc0c5 --- /dev/null +++ b/lib/medium/227_basic_calculator_ii.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +# @param {String} s +# @return {Integer} +def calculate(s) + stack = [] + curr = 0 + op = '+' + + s.each_char do |c| + if c.match?(/[0-9]/) + curr = curr * 10 + c.to_i + elsif c != ' ' + stack.push( + perform_operation( + stack, + op, + curr + ) + ) + + curr = 0 + op = c + end + end + + stack.push( + perform_operation( + stack, + op, + curr + ) + ) + + stack.sum +end + +private + +# @param {Array} stack +# @param {String} op +# @param {Integer} num +# @return {Integer} +def perform_operation(stack, op, num) + case op + when '+' + num + when '-' + -num + when '*' + stack.pop * num + when '/' + (stack.pop.to_f / num).to_i + end +end diff --git a/test/medium/test_227_basic_calculator_ii.rb b/test/medium/test_227_basic_calculator_ii.rb new file mode 100644 index 00000000..504562c2 --- /dev/null +++ b/test/medium/test_227_basic_calculator_ii.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/227_basic_calculator_ii' +require 'minitest/autorun' + +class BasicCalculatorIITest < ::Minitest::Test + def test_default_one = assert_equal(7, calculate('3+2*2')) + + def test_default_two = assert_equal(1, calculate(' 3/2 ')) + + def test_default_three = assert_equal(5, calculate(' 3+5 / 2 ')) + + def test_additional_one = assert_equal(1, calculate('2-1')) +end From c7d0f14ce3177628f5d0455a8df6ce9b0b544c1f Mon Sep 17 00:00:00 2001 From: fartem Date: Tue, 1 Oct 2024 08:58:11 +0300 Subject: [PATCH 2/2] 2024-09-30 v. 6.7.1: added "215. Kth Largest Element in an Array" --- lib/medium/227_basic_calculator_ii.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/medium/227_basic_calculator_ii.rb b/lib/medium/227_basic_calculator_ii.rb index 57ffc0c5..fee4ec73 100644 --- a/lib/medium/227_basic_calculator_ii.rb +++ b/lib/medium/227_basic_calculator_ii.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +# https://leetcode.com/problems/basic-calculator-ii/ # @param {String} s # @return {Integer} def calculate(s)