From 47e88aac1b881578112d2d6ec43be3d50053a1de Mon Sep 17 00:00:00 2001 From: liu13 <1099976891@qq.com> Date: Mon, 25 Feb 2019 09:54:51 +0800 Subject: [PATCH] 20190225 --- code/lc190.java | 25 +++++++++++++++++++++++++ code/lc191.java | 22 ++++++++++++++++++++++ code/lc202.java | 32 ++++++++++++++++++++++++++++++++ code/lc204.java | 23 +++++++++++++++++++++++ code/lc217.java | 21 +++++++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 code/lc190.java create mode 100644 code/lc191.java create mode 100644 code/lc202.java create mode 100644 code/lc204.java create mode 100644 code/lc217.java diff --git a/code/lc190.java b/code/lc190.java new file mode 100644 index 0000000..47bd8a6 --- /dev/null +++ b/code/lc190.java @@ -0,0 +1,25 @@ +package code; + +/* + * 190. Reverse Bits + * 题意:转换为二进制,反转,再输出 + * 难度:Easy + * 分类:Bit Manipulation + * 思路:做位移操作,自己没想起来,好好看看 + * Tips:注意 >>> 无符号位移 它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0 + */ +public class lc190 { + public static void main(String[] args) { + System.out.println(reverseBits(10)); + } + // you need treat n as an unsigned value + public static int reverseBits(int n) { + int result = 0; + for (int i = 0; i < 32 ; i++) { + result += n&1; + n >>>= 1; //无视符号右移 + if(i<31) result<<=1; + } + return result; + } +} diff --git a/code/lc191.java b/code/lc191.java new file mode 100644 index 0000000..13a0ea7 --- /dev/null +++ b/code/lc191.java @@ -0,0 +1,22 @@ +package code; +/* + * 191. Number of 1 Bits + * 题意:统计二进制数中1的个数 + * 难度:Easy + * 分类:Bit Manipulation + * 思路:每次移一位,与运算 + * Tips: + */ +public class lc191 { + // you need to treat n as an unsigned value + public int hammingWeight(int n) { + int sum = 0; + int a = 1; + while(a!=0){ + int b = n&a; + if(b!=0) sum += 1; + a <<= 1; + } + return sum; + } +} diff --git a/code/lc202.java b/code/lc202.java new file mode 100644 index 0000000..6429bd5 --- /dev/null +++ b/code/lc202.java @@ -0,0 +1,32 @@ +package code; +/* + * 202. Happy Number + * 题意:各位置上的数字循环求平方和,如果可以等于1,则为Happy Number + * 难度:Easy + * 分类:Hash Table, Math + * 思路:如果不会等于1,则会产生循环,用hashset记录之前是否出现过 + * 也可利用判断链表是否有环的思路,一个计算一步,一个计算两步,看是会相等来判断 + * Tips: + */ +import java.util.HashSet; + +public class lc202 { + public boolean isHappy(int n) { + HashSet hs = new HashSet(); + hs.add(n); + int sum = 0; + while(true){ + sum = 0; + while(n!=0){ + sum += Math.pow(n%10,2); + n = n/10; + } + if(sum==1) return true; + else if(hs.contains(sum)) break; + hs.add(sum); + n = sum; + System.out.println(sum); + } + return false; + } +} diff --git a/code/lc204.java b/code/lc204.java new file mode 100644 index 0000000..cdf21d3 --- /dev/null +++ b/code/lc204.java @@ -0,0 +1,23 @@ +package code; +/* + * 204. Count Primes + * 题意:计算小于n的素数的个数 + * 难度:Easy + * 分类:Hash Table, Math + * 思路:两个循环,相乘得到的数不是素数。 + * Tips: + */ +public class lc204 { + public int countPrimes(int n) { + if(n<3) return 0; + boolean[] flags = new boolean[n]; + int sum = 0; + for(int i=2; i(); + for(int i=0; i