From 1641b825ffba5774a3d16c753c231f981e573238 Mon Sep 17 00:00:00 2001 From: yuanguangxin <274841922@qq.com> Date: Wed, 26 Feb 2020 20:02:05 +0800 Subject: [PATCH] add q141/q202/q258 --- .idea/workspace.xml | 74 +++++++++++++------ README.md | 3 + .../q141_环形链表/f1/ListNode.java | 12 +++ .../q141_环形链表/f1/Solution.java | 23 ++++++ .../q141_环形链表/f2/ListNode.java | 12 +++ .../q141_环形链表/f2/Solution.java | 23 ++++++ src/数字操作/q202_快乐数/Solution.java | 29 ++++++++ .../q258_各位相加/Solution.java | 16 ++++ 8 files changed, 168 insertions(+), 24 deletions(-) create mode 100644 src/hash相关/q141_环形链表/f1/ListNode.java create mode 100644 src/hash相关/q141_环形链表/f1/Solution.java create mode 100644 src/hash相关/q141_环形链表/f2/ListNode.java create mode 100644 src/hash相关/q141_环形链表/f2/Solution.java create mode 100644 src/数字操作/q202_快乐数/Solution.java create mode 100644 src/数字操作/q258_各位相加/Solution.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 1031030..1271c27 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,8 +2,14 @@ + + + + + + - + + + - - @@ -79,7 +85,7 @@ - + + + + - @@ -263,7 +282,7 @@ - + 1580045439607 @@ -524,7 +543,14 @@ - @@ -577,7 +603,6 @@ - @@ -602,7 +627,8 @@ - @@ -617,35 +643,35 @@ - + - - + + - - + + - + - + - + - + - + - + - + - + @@ -671,10 +697,10 @@ - + - + diff --git a/README.md b/README.md index 3b5cb4b..1e45ed1 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ ### Hash相关 * [q1_两数之和](/src/hash相关/q1_两数之和) +* [q141_环形链表](/src/hash相关/q141_环形链表) ### 链表操作 @@ -35,6 +36,8 @@ * [q9_回文数](/src/数字操作/q9_回文数) * [q43_字符串相乘](/src/数字操作/q43_字符串相乘) * [q172_阶乘后的零](/src/数字操作/q172_阶乘后的零) +* [q202_快乐数](/src/数字操作/q202_快乐数) +* [q258_各位相加](/src/数字操作/q258_各位相加) ### 数组操作 diff --git a/src/hash相关/q141_环形链表/f1/ListNode.java b/src/hash相关/q141_环形链表/f1/ListNode.java new file mode 100644 index 0000000..94c7688 --- /dev/null +++ b/src/hash相关/q141_环形链表/f1/ListNode.java @@ -0,0 +1,12 @@ +package hash相关.q141_环形链表.f1; + + +public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } +} + diff --git a/src/hash相关/q141_环形链表/f1/Solution.java b/src/hash相关/q141_环形链表/f1/Solution.java new file mode 100644 index 0000000..d2397e0 --- /dev/null +++ b/src/hash相关/q141_环形链表/f1/Solution.java @@ -0,0 +1,23 @@ +package hash相关.q141_环形链表.f1; + +import java.util.HashSet; +import java.util.Set; + +/** + * 哈希表 o(n) + */ +public class Solution { + + public boolean hasCycle(ListNode head) { + Set nodesSeen = new HashSet<>(); + while (head != null) { + if (nodesSeen.contains(head)) { + return true; + } else { + nodesSeen.add(head); + } + head = head.next; + } + return false; + } +} diff --git a/src/hash相关/q141_环形链表/f2/ListNode.java b/src/hash相关/q141_环形链表/f2/ListNode.java new file mode 100644 index 0000000..07603ce --- /dev/null +++ b/src/hash相关/q141_环形链表/f2/ListNode.java @@ -0,0 +1,12 @@ +package hash相关.q141_环形链表.f2; + + +public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } +} + diff --git a/src/hash相关/q141_环形链表/f2/Solution.java b/src/hash相关/q141_环形链表/f2/Solution.java new file mode 100644 index 0000000..2b1721e --- /dev/null +++ b/src/hash相关/q141_环形链表/f2/Solution.java @@ -0,0 +1,23 @@ +package hash相关.q141_环形链表.f2; + +/** + * 快慢指针 o(n) + */ +public class Solution { + + public boolean hasCycle(ListNode head) { + if (head == null || head.next == null) { + return false; + } + ListNode slow = head; + ListNode fast = head.next; + while (slow != fast) { + if (fast == null || fast.next == null) { + return false; + } + slow = slow.next; + fast = fast.next.next; + } + return true; + } +} diff --git a/src/数字操作/q202_快乐数/Solution.java b/src/数字操作/q202_快乐数/Solution.java new file mode 100644 index 0000000..624eb3e --- /dev/null +++ b/src/数字操作/q202_快乐数/Solution.java @@ -0,0 +1,29 @@ +package 数字操作.q202_快乐数; + +/** + * 快慢指针,思想同q141判断是否有环,用快慢指针找出循环终止条件 o(n) + */ +public class Solution { + + private int bitSquareSum(int n) { + int sum = 0; + while (n > 0) { + int bit = n % 10; + sum += bit * bit; + n = n / 10; + } + return sum; + } + + public boolean isHappy(int n) { + int slow = n; + int fast = n; + do { + slow = bitSquareSum(slow); + fast = bitSquareSum(fast); + fast = bitSquareSum(fast); + } while (slow != fast); + + return slow == 1; + } +} diff --git a/src/数字操作/q258_各位相加/Solution.java b/src/数字操作/q258_各位相加/Solution.java new file mode 100644 index 0000000..1cce544 --- /dev/null +++ b/src/数字操作/q258_各位相加/Solution.java @@ -0,0 +1,16 @@ +package 数字操作.q258_各位相加; + +/** + * 找规律 o(1) xyz=100*x+10*y+z=99*x+9*y+x+y+z + */ +public class Solution { + + public int addDigits(int num) { + if (num % 9 == 0 && num != 0) { + num = 9; + } else { + num %= 9; + } + return num; + } +}