Skip to content

Commit 98d1470

Browse files
committed
2024-11-11 v. 7.0.0: added "402. Remove K Digits"
1 parent da01ec2 commit 98d1470

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,3 +565,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
565565
| 394. Decode String | [Link](https://leetcode.com/problems/decode-string/) | [Link](./lib/medium/394_decode_string.rb) | [Link](./test/medium/test_394_decode_string.rb) |
566566
| 398. Random Pick Index | [Link](https://leetcode.com/problems/random-pick-index/) | [Link](./lib/medium/398_random_pick_index.rb) | [Link](./test/medium/test_398_random_pick_index.rb) |
567567
| 400. Nth Digit | [Link](https://leetcode.com/problems/nth-digit/) | [Link](./lib/medium/400_nth_digit.rb) | [Link](./test/medium/test_400_nth_digit.rb) |
568+
| 402. Remove K Digits | [Link](https://leetcode.com/problems/remove-k-digits/) | [Link](./lib/medium/402_remove_k_digits.rb) | [Link](./test/medium/test_402_remove_k_digits.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.9.9'
8+
s.version = '7.0.0'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'

lib/medium/402_remove_k_digits.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/remove-k-digits/
4+
# @param {String} num
5+
# @param {Integer} k
6+
# @return {String}
7+
def remove_kdigits(num, k)
8+
return '0' if num.size == k
9+
10+
stack = []
11+
i = 0
12+
while i < num.size
13+
while k.positive? && !stack.empty? && stack.last > num[i]
14+
stack.pop
15+
k -= 1
16+
end
17+
18+
stack << num[i]
19+
i += 1
20+
end
21+
22+
while k.positive?
23+
stack.pop
24+
k -= 1
25+
end
26+
27+
result = []
28+
result << stack.pop until stack.empty?
29+
30+
result.reverse!
31+
result.delete_at(0) while result.size > 1 && result[0] == '0'
32+
33+
result.join
34+
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/402_remove_k_digits'
5+
require 'minitest/autorun'
6+
7+
class RemoveKDigitsTest < ::Minitest::Test
8+
def test_default_one = assert_equal('1219', remove_kdigits('1432219', 3))
9+
10+
def test_default_two = assert_equal('200', remove_kdigits('10200', 1))
11+
12+
def test_default_three = assert_equal('0', remove_kdigits('10', 2))
13+
14+
def test_additional_one = assert_equal('11', remove_kdigits('112', 1))
15+
end

0 commit comments

Comments
 (0)