From bff038b9d52aaf89138e3d55bde6809b295226d8 Mon Sep 17 00:00:00 2001
From: fanxb <fanxb.tl@gmail.com>
Date: Sun, 7 Apr 2024 23:54:01 +0800
Subject: [PATCH] add

---
 .../src/com/fanxb/common/p100/Q136.java       | 11 ++++++++
 .../src/com/fanxb/common/p100/Q137.java       | 19 +++++++++++++
 5.leetcode/src/com/fanxb/common/p100/Q66.java | 22 +++++++++++++++
 5.leetcode/src/com/fanxb/common/p100/Q69.java | 28 ++++++++++++++++++-
 5.leetcode/src/com/fanxb/common/p100/Q9.java  | 28 ++++++++++---------
 .../src/com/fanxb/common/p200/Q172.java       | 12 ++++++++
 .../src/com/fanxb/common/p200/Q191.java       | 21 ++++++++++++++
 .../src/com/fanxb/common/p300/Q201.java       | 20 +++++++++++++
 8 files changed, 147 insertions(+), 14 deletions(-)
 create mode 100644 5.leetcode/src/com/fanxb/common/p100/Q136.java
 create mode 100644 5.leetcode/src/com/fanxb/common/p100/Q137.java
 create mode 100644 5.leetcode/src/com/fanxb/common/p100/Q66.java
 create mode 100644 5.leetcode/src/com/fanxb/common/p200/Q172.java
 create mode 100644 5.leetcode/src/com/fanxb/common/p200/Q191.java
 create mode 100644 5.leetcode/src/com/fanxb/common/p300/Q201.java

diff --git a/5.leetcode/src/com/fanxb/common/p100/Q136.java b/5.leetcode/src/com/fanxb/common/p100/Q136.java
new file mode 100644
index 0000000..a0bdfc3
--- /dev/null
+++ b/5.leetcode/src/com/fanxb/common/p100/Q136.java
@@ -0,0 +1,11 @@
+package com.fanxb.common.p100;
+
+public class Q136 {
+    public int singleNumber(int[] nums) {
+        int res = nums[0];
+        for (int i = 1; i < nums.length; i++) {
+            res = res ^ nums[i];
+        }
+        return res;
+    }
+}
diff --git a/5.leetcode/src/com/fanxb/common/p100/Q137.java b/5.leetcode/src/com/fanxb/common/p100/Q137.java
new file mode 100644
index 0000000..e4e23ab
--- /dev/null
+++ b/5.leetcode/src/com/fanxb/common/p100/Q137.java
@@ -0,0 +1,19 @@
+package com.fanxb.common.p100;
+
+public class Q137 {
+    public int singleNumber(int[] nums) {
+        int[] count = new int[32];
+        for (int num : nums) {
+            for (int i = 0; i < 32; i++) {
+                count[i] += num & 1;
+                num = num >>> 1;
+            }
+        }
+        int res = 0;
+        for (int i = 0; i < 32; i++) {
+            res = res | count[i] % 3;
+            res = res << 1;
+        }
+        return res;
+    }
+}
diff --git a/5.leetcode/src/com/fanxb/common/p100/Q66.java b/5.leetcode/src/com/fanxb/common/p100/Q66.java
new file mode 100644
index 0000000..0de3355
--- /dev/null
+++ b/5.leetcode/src/com/fanxb/common/p100/Q66.java
@@ -0,0 +1,22 @@
+package com.fanxb.common.p100;
+
+import java.util.Arrays;
+
+public class Q66 {
+    public int[] plusOne(int[] digits) {
+        if (digits[0] == 0) return new int[]{1};
+        int n = digits.length;
+        digits[n - 1]++;
+        boolean hasNext = false;
+        for (int i = digits.length - 1; i >= 0; i--) {
+            digits[i] += hasNext ? 1 : 0;
+            hasNext = digits[i] >= 10;
+            if (hasNext) digits[i] = digits[i] - 10;
+            else return digits;
+        }
+        int[] res = new int[digits.length + 1];
+        res[0] = 1;
+        System.arraycopy(digits, 0, res, 1, res.length - 1);
+        return res;
+    }
+}
diff --git a/5.leetcode/src/com/fanxb/common/p100/Q69.java b/5.leetcode/src/com/fanxb/common/p100/Q69.java
index 19852a3..22ee9e0 100644
--- a/5.leetcode/src/com/fanxb/common/p100/Q69.java
+++ b/5.leetcode/src/com/fanxb/common/p100/Q69.java
@@ -42,7 +42,7 @@ public class Q69 {
         if (x <= 3) return 1;
         int l = 2, r = x / 2, m;
         while ((m = (int) Math.floor((l + r) / 2.0)) != r) {
-            if (m * (long)m > x) {
+            if (m * (long) m > x) {
                 r = m;
             } else if (m == l) {
                 r--;
@@ -53,6 +53,32 @@ public class Q69 {
         return m;
     }
 
+    public int mySqrt2(int x) {
+        if (x == 0) return 0;
+        long l = 0, r = x;
+        while (l < r) {
+            long mid = (l + r) / 2;
+            long val = mid * mid;
+            if (val == x) return (int) mid;
+            else if (val > x) r = mid;
+            else if (mid == l) return (int) l;
+            else l = mid;
+        }
+        return (int) l;
+    }
+
+    public int mySqrt3(int x) {
+        if (x == 0) return 0;
+        double temp = x;
+        while (true) {
+            double temp1 = (temp + x / temp) / 2;
+            if (Math.abs(temp1 - temp) <= 0.00001) {
+                return (int) temp1;
+            }
+            temp =temp1;
+        }
+    }
+
     public static void main(String[] args) {
 //        System.out.println(new Q69().mySqrt(2147395599));
         System.out.println(new Q69().mySqrt1(2147395599));
diff --git a/5.leetcode/src/com/fanxb/common/p100/Q9.java b/5.leetcode/src/com/fanxb/common/p100/Q9.java
index 367ed09..4eea6c8 100644
--- a/5.leetcode/src/com/fanxb/common/p100/Q9.java
+++ b/5.leetcode/src/com/fanxb/common/p100/Q9.java
@@ -9,23 +9,25 @@ package com.fanxb.common.p100;
 public class Q9 {
 
     public boolean isPalindrome(int x) {
-        //小于0的数或者末尾为0的正数肯定不是回文数
-        if (x < 0 || (x > 0 && x % 10 == 0)) {
-            return false;
-        }
-        long temp = 1;
-        while (x / (temp * 10) > 0) {
-            temp = temp * 10;
-        }
-        for (int i = 1; i < temp; temp = temp / 10, i *= 10) {
-            System.out.println(x / i % 10 + ":" + x / temp % 10);
-            if (x / i % 10 != x / temp % 10) {
-                return false;
-            }
+        if (x < 0) return false;
+        String s = String.valueOf(x);
+        int i = 0, j = s.length() - 1;
+        while (i < j) {
+            if (s.charAt(i++) != s.charAt(j--)) return false;
         }
         return true;
     }
 
+    public boolean isPalindrome1(int x) {
+        if (x < 0) return false;
+        int temp = x, rev = 0;
+        while (temp > 0) {
+            rev = rev * 10 + temp % 10;
+            temp = temp / 10;
+        }
+        return x == rev;
+    }
+
     public static void main(String[] args) {
         Q9 instance = new Q9();
         System.out.println(instance.isPalindrome(1212312));
diff --git a/5.leetcode/src/com/fanxb/common/p200/Q172.java b/5.leetcode/src/com/fanxb/common/p200/Q172.java
new file mode 100644
index 0000000..b4727b6
--- /dev/null
+++ b/5.leetcode/src/com/fanxb/common/p200/Q172.java
@@ -0,0 +1,12 @@
+package com.fanxb.common.p200;
+
+public class Q172 {
+    public int trailingZeroes(int n) {
+        int res = 0;
+        while (n > 0) {
+            res += n / 5;
+            n = n / 5;
+        }
+        return res;
+    }
+}
diff --git a/5.leetcode/src/com/fanxb/common/p200/Q191.java b/5.leetcode/src/com/fanxb/common/p200/Q191.java
new file mode 100644
index 0000000..de9bdb1
--- /dev/null
+++ b/5.leetcode/src/com/fanxb/common/p200/Q191.java
@@ -0,0 +1,21 @@
+package com.fanxb.common.p200;
+
+public class Q191 {
+    public int hammingWeight(int n) {
+        int count = 0;
+        while (n != 0) {
+            count += n & 1;
+            n = n >>> 1;
+        }
+        return count;
+    }
+
+    public int hammingWeight1(int n) {
+        int count = 0;
+        while (n != 0) {
+            n = n & (n - 1);
+            count++;
+        }
+        return count;
+    }
+}
diff --git a/5.leetcode/src/com/fanxb/common/p300/Q201.java b/5.leetcode/src/com/fanxb/common/p300/Q201.java
new file mode 100644
index 0000000..6207c65
--- /dev/null
+++ b/5.leetcode/src/com/fanxb/common/p300/Q201.java
@@ -0,0 +1,20 @@
+package com.fanxb.common.p300;
+
+public class Q201 {
+    public int rangeBitwiseAnd(int left, int right) {
+        int count = 0;
+        while (left < right) {
+            left >>>= 1;
+            right >>>= 1;
+            count++;
+        }
+        return left << count;
+    }
+
+    public int rangeBitwiseAnd1(int left, int right) {
+        while (left < right) {
+            right = right & (right - 1);
+        }
+        return right;
+    }
+}