diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 4299d51..ddeb738 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -23,4 +23,5 @@ mod p2744_find_maximum_number_of_string_pairs; mod p2171_removing_minimum_number_of_magic_beans; mod p2809_minimum_time_to_make_array_sum_at_most_x; mod p2788_split_strings_by_separator; -mod p410_split_array_largest_sum; \ No newline at end of file +mod p410_split_array_largest_sum; +mod p670_maximum_swap; \ No newline at end of file diff --git a/src/problem/p670_maximum_swap.rs b/src/problem/p670_maximum_swap.rs new file mode 100644 index 0000000..7193013 --- /dev/null +++ b/src/problem/p670_maximum_swap.rs @@ -0,0 +1,61 @@ +/** + * [670] Maximum Swap + */ +pub struct Solution {} + + +// submission codes start here + +impl Solution { + pub fn maximum_swap(num: i32) -> i32 { + let mut num_array = Vec::new(); + let mut num = num; + + while num != 0 { + num_array.push(num % 10); + num = num / 10; + } + num_array.reverse(); + + for i in 0..num_array.len() { + let mut index = i; + for j in (i + 1)..num_array.len() { + if num_array[j] >= num_array[index] { + index = j; + } + } + + if index != i && num_array[index] != num_array[i] { + let temp = num_array[i]; + num_array[i] = num_array[index]; + num_array[index] = temp; + break; + } + } + + let mut result = 0; + + for i in num_array { + result += i; + result *= 10; + } + result /= 10; + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_670() { + assert_eq!(Solution::maximum_swap(2736), 7236); + assert_eq!(Solution::maximum_swap(9973), 9973); + assert_eq!(Solution::maximum_swap(98368), 98863); + assert_eq!(Solution::maximum_swap(1993), 9913); + } +}