summaryrefslogtreecommitdiff
path: root/07_reverse-integer
diff options
context:
space:
mode:
Diffstat (limited to '07_reverse-integer')
-rw-r--r--07_reverse-integer/Cargo.lock7
-rw-r--r--07_reverse-integer/Cargo.toml6
-rw-r--r--07_reverse-integer/src/main.rs44
3 files changed, 57 insertions, 0 deletions
diff --git a/07_reverse-integer/Cargo.lock b/07_reverse-integer/Cargo.lock
new file mode 100644
index 0000000..0719492
--- /dev/null
+++ b/07_reverse-integer/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "reverse-integer"
+version = "0.1.0"
diff --git a/07_reverse-integer/Cargo.toml b/07_reverse-integer/Cargo.toml
new file mode 100644
index 0000000..23cff3d
--- /dev/null
+++ b/07_reverse-integer/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "reverse-integer"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
diff --git a/07_reverse-integer/src/main.rs b/07_reverse-integer/src/main.rs
new file mode 100644
index 0000000..2fb80c4
--- /dev/null
+++ b/07_reverse-integer/src/main.rs
@@ -0,0 +1,44 @@
+fn main() {
+ dbg!(Solution::reverse(1534236469));
+}
+
+struct Solution(());
+
+impl Solution {
+ pub fn reverse(x: i32) -> i32 {
+ let n = if x < 0 { x * -1 } else { x };
+
+ if let Some(i) = Self::invert(n as u32, 0).0 {
+ let t: u32 = 1 << 31;
+
+ if (i & t) == t {
+ return 0;
+ }
+
+ if x < 0 {
+ return i as i32 * -1;
+ }
+
+ return i as i32;
+ }
+
+ 0
+ }
+
+ fn invert(n: u32, pow: u32) -> (Option<u32>, u32) {
+ if n < 10 {
+ return (Some(n), pow + 1);
+ }
+
+ let m = n % 10;
+ let d = (n - m) / 10;
+ let c = Self::invert(d, pow);
+
+ if let Some(inner) = c.0
+ && let Some(m) = m.checked_mul(10_u32.pow(c.1))
+ {
+ return (Some(m + inner), c.1 + 1);
+ }
+ (None, 0)
+ }
+}