commit 325fd04440403b86ba313401962d940cef1f5a5f
parent bedd45bbdb069ba6bcc4df16577bd6fd2e2c1a1d
Author: Jack Sangdahl <jack@pngu.org>
Date: Fri, 1 May 2026 21:12:47 -0600
788. rotated digits
Diffstat:
2 files changed, 75 insertions(+), 0 deletions(-)
diff --git a/rotated_digits.c b/rotated_digits.c
@@ -0,0 +1,41 @@
+// 788. Rotated Digits
+#include "leetcode.h"
+
+/*
+ * an integer 'x' is good if after rotating each digit individually by 180
+ * degrees, we get a valid number that is different from 'x'. each digit must be
+ * rotated - we cannot choose to leave it alone. a number is valid if each digit
+ * remains after rotation. given the integer 'n', return the number of good
+ * integers in the range '[1, n]'.
+ */
+
+int rotatedDigits(int n) {
+ int cnt = 0;
+ for (int i = 1; i <= n; i++) {
+ int check = i;
+ bool valid = true, changed = false;
+ while (check > 0 && valid) {
+ int digit = check % 10;
+ if (digit == 3 || digit == 4 || digit == 7)
+ valid = false;
+ else if (digit == 2 || digit == 5 || digit == 6 || digit == 9)
+ changed = true;
+ check /= 10;
+ }
+ if (valid && changed)
+ cnt++;
+ }
+ return cnt;
+}
+
+int main() {
+ int r1 = rotatedDigits(10);
+ int r2 = rotatedDigits(1);
+ int r3 = rotatedDigits(2);
+ printf("%d\n", r1);
+ assert(r1 == 4);
+ printf("%d\n", r2);
+ assert(r2 == 0);
+ printf("%d\n", r3);
+ assert(r3 == 1);
+}
diff --git a/rotated_digits.py b/rotated_digits.py
@@ -0,0 +1,34 @@
+# 788. Rotated Digits
+
+"""
+an integer 'x' is good if after rotating each digit individually by 180
+degrees, we get a valid number that is different from 'x'. each digit must be
+rotated - we cannot choose to leave it alone. a number is valid if each digit
+remains after rotation. given the integer 'n', return the number of good
+integers in the range '[1, n]'.
+"""
+
+
+class Solution:
+ def rotatedDigits(self, n: int) -> int:
+ cnt = 0
+ for i in range(1, n + 1):
+ check = i
+ valid, changed = True, False
+ while check > 0 and valid:
+ digit = check % 10
+ if digit in (3, 4, 7):
+ valid = False
+ elif digit in (2, 5, 6, 9):
+ changed = True
+ check //= 10
+ if valid and changed:
+ cnt += 1
+ return cnt
+
+
+if __name__ == "__main__":
+ obj = Solution()
+ print(obj.rotatedDigits(n=10))
+ print(obj.rotatedDigits(n=1))
+ print(obj.rotatedDigits(n=2))