From 5f10fcee50d6361170688111d18c7d3d73c56e9d Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Thu, 17 Oct 2024 23:27:10 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB670.=20Maximum=20Swap=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit URL: https://leetcode.com/problems/maximum-swap/ Signed-off-by: Matej Focko --- go/maximum-swap.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 go/maximum-swap.go diff --git a/go/maximum-swap.go b/go/maximum-swap.go new file mode 100644 index 0000000..80da796 --- /dev/null +++ b/go/maximum-swap.go @@ -0,0 +1,46 @@ +package main + +func maximumSwap(num int) int { + fromInt := func() (int, []int) { + digits := make([]int, 9) + + i := 0 + for ; num > 0; i++ { + digits[i] = num % 10 + num /= 10 + } + + return i, digits + } + + toInt := func(digits []int) int { + result := 0 + + for i := len(digits) - 1; i >= 0; i-- { + result *= 10 + result += digits[i] + } + + return result + } + + length, digits := fromInt() + + for i := length - 1; i > 0; i-- { + max_index := i - 1 + for j := i - 1; j >= 0; j-- { + if digits[j] > digits[i] && digits[j] >= digits[max_index] { + max_index = j + } + } + + // found bigger digit that can be swapped + if digits[max_index] > digits[i] { + digits[max_index], digits[i] = digits[i], digits[max_index] + return toInt(digits) + } + } + + // no swaps happened + return toInt(digits) +}