검지offer문제--(20~29)
20. 값을 나타내는 문자열
NowCoder
제목 설명
true
"+100"
"5e2"
"-123"
"3.1416"
"-1E-16"
false
"12e"
"1a3.14"
"1.2.3"
"+-5"
"12e+4.3"
문제 풀이 사고방식
정규 표현식을 사용하여 일치합니다.[] :
() :
? : 0 ~ 1
+ : 1 ~ n
* : 0 ~ n
. :
\\. : .
\\d :
public boolean isNumeric(char[] str) {
if (str == null || str.length == 0) return false; return new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?"); }
21. 수조의 순서를 조정하여 홀수를 짝수 앞에 두다
NowCoder
제목 설명
홀수와 홀수, 짝수와 짝수 사이의 상대적인 위치가 변하지 않도록 보증해야 하는데 이것은 책과 그다지 같지 않다.
문제 풀이 사고방식
방법1: 시간 복잡도 O(N), 공간 복잡도 O(N)를 위한 새 그룹을 만듭니다.public void reOrderArray(int[] nums) {
//
int oddCnt = 0; for (int x : nums) if (!isEven(x)) oddCnt++; int[] copy = nums.clone(); int i = 0, j = oddCnt; for (int num : copy) { if (num % 2 == 1) nums[i++] = num; else nums[j++] = num; } } private boolean isEven(int x) { return x % 2 == 0; }
방법2: 거품 사상을 사용하여 매번 현재 짝수가 현재 맨 오른쪽으로 올라간다.시간 복잡도 O(N2), 공간 복잡도 O(1), 시간 교환 공간.public void reOrderArray(int[] nums) {
int N = nums.length; for (int i = N - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (isEven(nums[j]) && !isEven(nums[j + 1])) { swap(nums, j, j + 1); } } } } private boolean isEven(int x) { return x % 2 == 0; } private void swap(int[] nums, int i, int j) { int t = nums[i]; nums[i] = nums[j]; nums[j] = t; }
22. 체인 테이블의 마지막 K 결점
NowCoder
문제 풀이 사고방식
체인 테이블의 길이는 N입니다.두 개의 포인터 P1과 P2를 설정하고 P1이 먼저 K 노드를 이동하도록 하면 N - K 노드가 이동할 수 있습니다.이때 P1과 P2를 동시에 이동시키면 P1이 체인 테이블의 끝으로 이동할 때 P2는 N-K 노드로 이동합니다. 이 위치가 바로 꼴찌의 K 노드입니다.
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null) return null; ListNode P1 = head; while (P1 != null && k-- > 0) P1 = P1.next; if (k > 0) return null; ListNode P2 = head; while (P1 != null) { P1 = P1.next; P2 = P2.next; } return P2; }
23. 체인 시계 중환의 입구 결점
NowCoder
제목 설명
하나의 체인 테이블에 고리가 포함되어 있습니다. 이 체인 시계의 고리의 입구 결점을 찾으십시오.추가 공간을 사용할 수 없음을 요구합니다.
문제 풀이 사고방식
두 개의 바늘을 사용합니다. 한 개의 바늘fast는 두 개의 노드를 이동하고, 한 개의 바늘slow는 한 개의 노드를 이동합니다.링이 존재하기 때문에 두 바늘은 반드시 링 중의 어느 노드에서 만난다.만약에 만남점이 아래 그림의 z1 위치에 있다고 가정하면 이때fast가 이동하는 노드 수는 x+2y+z이고 slow는 x+y이며 fast속도는 slow보다 배 빠르기 때문에 x+2y+z=2(x+y)를 얻어 x=z를 얻는다.
만남점에서 슬로우가 링의 입구점까지 z개의 노드를 이동해야 한다.fast가 다시 처음부터 이동하고 속도가 매번 하나의 노드로 변하면 링 입구점까지 x개의 노드를 이동해야 한다.위에서 x=z를 유도했기 때문에fast와 slow는 링 입구점에서 만날 것이다.
public ListNode EntryNodeOfLoop(ListNode pHead) {
if (pHead == null || pHead.next == null) return null; ListNode slow = pHead, fast = pHead; do { fast = fast.next.next; slow = slow.next; } while (slow != fast); fast = pHead; while (slow != fast) { slow = slow.next; fast = fast.next; } return slow; }
24. 체인 테이블 반전
NowCoder
문제 풀이 사고방식
차례로 돌아가다
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) return head; ListNode next = head.next; head.next = null; ListNode newHead = ReverseList(next); next.next = head; return newHead; }
교체하다
헤드 플러그를 사용하다.public ListNode ReverseList(ListNode head) {
ListNode newList = new ListNode(-1); while (head != null) { ListNode next = head.next; head.next = newList.next; newList.next = head; head = next; } return newList.next; }
25. 두 개의 정렬을 합친 체인 테이블
NowCoder
제목 설명
문제 풀이 사고방식
차례로 돌아가다
public ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null) return list2; if (list2 == null) return list1; if (list1.val <= list2.val) { list1.next = Merge(list1.next, list2); return list1; } else { list2.next = Merge(list1, list2.next); return list2; } }
교체하다
public ListNode Merge(ListNode list1, ListNode list2) {
ListNode head = new ListNode(-1); ListNode cur = head; while (list1 != null && list2 != null) { if (list1.val <= list2.val) { cur.next = list1; list1 = list1.next; } else { cur.next = list2; list2 = list2.next; } cur = cur.next; } if (list1 != null) cur.next = list1; if (list2 != null) cur.next = list2; return head.next; }
26. 나무의 자구조
NowCoder
제목 설명
문제 풀이 사고방식
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } private boolean isSubtreeWithRoot(TreeNode root1, TreeNode root2) { if (root2 == null) return true; if (root1 == null) return false; if (root1.val != root2.val) return false; return isSubtreeWithRoot(root1.left, root2.left) && isSubtreeWithRoot(root1.right, root2.right); }
27. 두 갈래 나무의 거울
NowCoder
제목 설명
문제 풀이 사고방식
public void Mirror(TreeNode root) {
if (root == null) return; swap(root); Mirror(root.left); Mirror(root.right); } private void swap(TreeNode root) { TreeNode t = root.left; root.left = root.right; root.right = t; }
28 대칭의 두 갈래 나무
NowCoder
제목 설명
문제 풀이 사고방식
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null)
return true; return isSymmetrical(pRoot.left, pRoot.right); } boolean isSymmetrical(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.val != t2.val) return false; return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left); }
29. 시계 방향으로 행렬 인쇄
NowCoder
제목 설명
다음 그림의 행렬은 시계 방향으로 인쇄된 결과: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
문제 풀이 사고방식
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>(); int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1; while (r1 <= r2 && c1 <= c2) { for (int i = c1; i <= c2; i++) ret.add(matrix[r1][i]); for (int i = r1 + 1; i <= r2; i++) ret.add(matrix[i][c2]); if (r1 != r2) for (int i = c2 - 1; i >= c1; i--) ret.add(matrix[r2][i]); if (c1 != c2) for (int i = r2 - 1; i > r1; i--) ret.add(matrix[i][c1]); r1++; r2--; c1++; c2--; } return ret; }
다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009020.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
true
"+100"
"5e2"
"-123"
"3.1416"
"-1E-16"
false
"12e"
"1a3.14"
"1.2.3"
"+-5"
"12e+4.3"
[] :
() :
? : 0 ~ 1
+ : 1 ~ n
* : 0 ~ n
. :
\\. : .
\\d :
public boolean isNumeric(char[] str) {
if (str == null || str.length == 0) return false; return new String(str).matches("[+-]?\\d*(\\.\\d+)?([eE][+-]?\\d+)?"); }
NowCoder
제목 설명
홀수와 홀수, 짝수와 짝수 사이의 상대적인 위치가 변하지 않도록 보증해야 하는데 이것은 책과 그다지 같지 않다.
문제 풀이 사고방식
방법1: 시간 복잡도 O(N), 공간 복잡도 O(N)를 위한 새 그룹을 만듭니다.
public void reOrderArray(int[] nums) {
//
int oddCnt = 0; for (int x : nums) if (!isEven(x)) oddCnt++; int[] copy = nums.clone(); int i = 0, j = oddCnt; for (int num : copy) { if (num % 2 == 1) nums[i++] = num; else nums[j++] = num; } } private boolean isEven(int x) { return x % 2 == 0; }
방법2: 거품 사상을 사용하여 매번 현재 짝수가 현재 맨 오른쪽으로 올라간다.시간 복잡도 O(N2), 공간 복잡도 O(1), 시간 교환 공간.
public void reOrderArray(int[] nums) {
int N = nums.length; for (int i = N - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (isEven(nums[j]) && !isEven(nums[j + 1])) { swap(nums, j, j + 1); } } } } private boolean isEven(int x) { return x % 2 == 0; } private void swap(int[] nums, int i, int j) { int t = nums[i]; nums[i] = nums[j]; nums[j] = t; }
22. 체인 테이블의 마지막 K 결점
NowCoder
문제 풀이 사고방식
체인 테이블의 길이는 N입니다.두 개의 포인터 P1과 P2를 설정하고 P1이 먼저 K 노드를 이동하도록 하면 N - K 노드가 이동할 수 있습니다.이때 P1과 P2를 동시에 이동시키면 P1이 체인 테이블의 끝으로 이동할 때 P2는 N-K 노드로 이동합니다. 이 위치가 바로 꼴찌의 K 노드입니다.
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null) return null; ListNode P1 = head; while (P1 != null && k-- > 0) P1 = P1.next; if (k > 0) return null; ListNode P2 = head; while (P1 != null) { P1 = P1.next; P2 = P2.next; } return P2; }
23. 체인 시계 중환의 입구 결점
NowCoder
제목 설명
하나의 체인 테이블에 고리가 포함되어 있습니다. 이 체인 시계의 고리의 입구 결점을 찾으십시오.추가 공간을 사용할 수 없음을 요구합니다.
문제 풀이 사고방식
두 개의 바늘을 사용합니다. 한 개의 바늘fast는 두 개의 노드를 이동하고, 한 개의 바늘slow는 한 개의 노드를 이동합니다.링이 존재하기 때문에 두 바늘은 반드시 링 중의 어느 노드에서 만난다.만약에 만남점이 아래 그림의 z1 위치에 있다고 가정하면 이때fast가 이동하는 노드 수는 x+2y+z이고 slow는 x+y이며 fast속도는 slow보다 배 빠르기 때문에 x+2y+z=2(x+y)를 얻어 x=z를 얻는다.
만남점에서 슬로우가 링의 입구점까지 z개의 노드를 이동해야 한다.fast가 다시 처음부터 이동하고 속도가 매번 하나의 노드로 변하면 링 입구점까지 x개의 노드를 이동해야 한다.위에서 x=z를 유도했기 때문에fast와 slow는 링 입구점에서 만날 것이다.
public ListNode EntryNodeOfLoop(ListNode pHead) {
if (pHead == null || pHead.next == null) return null; ListNode slow = pHead, fast = pHead; do { fast = fast.next.next; slow = slow.next; } while (slow != fast); fast = pHead; while (slow != fast) { slow = slow.next; fast = fast.next; } return slow; }
24. 체인 테이블 반전
NowCoder
문제 풀이 사고방식
차례로 돌아가다
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) return head; ListNode next = head.next; head.next = null; ListNode newHead = ReverseList(next); next.next = head; return newHead; }
교체하다
헤드 플러그를 사용하다.public ListNode ReverseList(ListNode head) {
ListNode newList = new ListNode(-1); while (head != null) { ListNode next = head.next; head.next = newList.next; newList.next = head; head = next; } return newList.next; }
25. 두 개의 정렬을 합친 체인 테이블
NowCoder
제목 설명
문제 풀이 사고방식
차례로 돌아가다
public ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null) return list2; if (list2 == null) return list1; if (list1.val <= list2.val) { list1.next = Merge(list1.next, list2); return list1; } else { list2.next = Merge(list1, list2.next); return list2; } }
교체하다
public ListNode Merge(ListNode list1, ListNode list2) {
ListNode head = new ListNode(-1); ListNode cur = head; while (list1 != null && list2 != null) { if (list1.val <= list2.val) { cur.next = list1; list1 = list1.next; } else { cur.next = list2; list2 = list2.next; } cur = cur.next; } if (list1 != null) cur.next = list1; if (list2 != null) cur.next = list2; return head.next; }
26. 나무의 자구조
NowCoder
제목 설명
문제 풀이 사고방식
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } private boolean isSubtreeWithRoot(TreeNode root1, TreeNode root2) { if (root2 == null) return true; if (root1 == null) return false; if (root1.val != root2.val) return false; return isSubtreeWithRoot(root1.left, root2.left) && isSubtreeWithRoot(root1.right, root2.right); }
27. 두 갈래 나무의 거울
NowCoder
제목 설명
문제 풀이 사고방식
public void Mirror(TreeNode root) {
if (root == null) return; swap(root); Mirror(root.left); Mirror(root.right); } private void swap(TreeNode root) { TreeNode t = root.left; root.left = root.right; root.right = t; }
28 대칭의 두 갈래 나무
NowCoder
제목 설명
문제 풀이 사고방식
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null)
return true; return isSymmetrical(pRoot.left, pRoot.right); } boolean isSymmetrical(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.val != t2.val) return false; return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left); }
29. 시계 방향으로 행렬 인쇄
NowCoder
제목 설명
다음 그림의 행렬은 시계 방향으로 인쇄된 결과: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
문제 풀이 사고방식
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>(); int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1; while (r1 <= r2 && c1 <= c2) { for (int i = c1; i <= c2; i++) ret.add(matrix[r1][i]); for (int i = r1 + 1; i <= r2; i++) ret.add(matrix[i][c2]); if (r1 != r2) for (int i = c2 - 1; i >= c1; i--) ret.add(matrix[r2][i]); if (c1 != c2) for (int i = r2 - 1; i > r1; i--) ret.add(matrix[i][c1]); r1++; r2--; c1++; c2--; } return ret; }
다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009020.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public ListNode FindKthToTail(ListNode head, int k) {
if (head == null) return null; ListNode P1 = head; while (P1 != null && k-- > 0) P1 = P1.next; if (k > 0) return null; ListNode P2 = head; while (P1 != null) { P1 = P1.next; P2 = P2.next; } return P2; }
NowCoder
제목 설명
하나의 체인 테이블에 고리가 포함되어 있습니다. 이 체인 시계의 고리의 입구 결점을 찾으십시오.추가 공간을 사용할 수 없음을 요구합니다.
문제 풀이 사고방식
두 개의 바늘을 사용합니다. 한 개의 바늘fast는 두 개의 노드를 이동하고, 한 개의 바늘slow는 한 개의 노드를 이동합니다.링이 존재하기 때문에 두 바늘은 반드시 링 중의 어느 노드에서 만난다.만약에 만남점이 아래 그림의 z1 위치에 있다고 가정하면 이때fast가 이동하는 노드 수는 x+2y+z이고 slow는 x+y이며 fast속도는 slow보다 배 빠르기 때문에 x+2y+z=2(x+y)를 얻어 x=z를 얻는다.
만남점에서 슬로우가 링의 입구점까지 z개의 노드를 이동해야 한다.fast가 다시 처음부터 이동하고 속도가 매번 하나의 노드로 변하면 링 입구점까지 x개의 노드를 이동해야 한다.위에서 x=z를 유도했기 때문에fast와 slow는 링 입구점에서 만날 것이다.
public ListNode EntryNodeOfLoop(ListNode pHead) {
if (pHead == null || pHead.next == null) return null; ListNode slow = pHead, fast = pHead; do { fast = fast.next.next; slow = slow.next; } while (slow != fast); fast = pHead; while (slow != fast) { slow = slow.next; fast = fast.next; } return slow; }
24. 체인 테이블 반전
NowCoder
문제 풀이 사고방식
차례로 돌아가다
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) return head; ListNode next = head.next; head.next = null; ListNode newHead = ReverseList(next); next.next = head; return newHead; }
교체하다
헤드 플러그를 사용하다.public ListNode ReverseList(ListNode head) {
ListNode newList = new ListNode(-1); while (head != null) { ListNode next = head.next; head.next = newList.next; newList.next = head; head = next; } return newList.next; }
25. 두 개의 정렬을 합친 체인 테이블
NowCoder
제목 설명
문제 풀이 사고방식
차례로 돌아가다
public ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null) return list2; if (list2 == null) return list1; if (list1.val <= list2.val) { list1.next = Merge(list1.next, list2); return list1; } else { list2.next = Merge(list1, list2.next); return list2; } }
교체하다
public ListNode Merge(ListNode list1, ListNode list2) {
ListNode head = new ListNode(-1); ListNode cur = head; while (list1 != null && list2 != null) { if (list1.val <= list2.val) { cur.next = list1; list1 = list1.next; } else { cur.next = list2; list2 = list2.next; } cur = cur.next; } if (list1 != null) cur.next = list1; if (list2 != null) cur.next = list2; return head.next; }
26. 나무의 자구조
NowCoder
제목 설명
문제 풀이 사고방식
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } private boolean isSubtreeWithRoot(TreeNode root1, TreeNode root2) { if (root2 == null) return true; if (root1 == null) return false; if (root1.val != root2.val) return false; return isSubtreeWithRoot(root1.left, root2.left) && isSubtreeWithRoot(root1.right, root2.right); }
27. 두 갈래 나무의 거울
NowCoder
제목 설명
문제 풀이 사고방식
public void Mirror(TreeNode root) {
if (root == null) return; swap(root); Mirror(root.left); Mirror(root.right); } private void swap(TreeNode root) { TreeNode t = root.left; root.left = root.right; root.right = t; }
28 대칭의 두 갈래 나무
NowCoder
제목 설명
문제 풀이 사고방식
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null)
return true; return isSymmetrical(pRoot.left, pRoot.right); } boolean isSymmetrical(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.val != t2.val) return false; return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left); }
29. 시계 방향으로 행렬 인쇄
NowCoder
제목 설명
다음 그림의 행렬은 시계 방향으로 인쇄된 결과: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
문제 풀이 사고방식
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>(); int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1; while (r1 <= r2 && c1 <= c2) { for (int i = c1; i <= c2; i++) ret.add(matrix[r1][i]); for (int i = r1 + 1; i <= r2; i++) ret.add(matrix[i][c2]); if (r1 != r2) for (int i = c2 - 1; i >= c1; i--) ret.add(matrix[r2][i]); if (c1 != c2) for (int i = r2 - 1; i > r1; i--) ret.add(matrix[i][c1]); r1++; r2--; c1++; c2--; } return ret; }
다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009020.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) return head; ListNode next = head.next; head.next = null; ListNode newHead = ReverseList(next); next.next = head; return newHead; }
public ListNode ReverseList(ListNode head) {
ListNode newList = new ListNode(-1); while (head != null) { ListNode next = head.next; head.next = newList.next; newList.next = head; head = next; } return newList.next; }
NowCoder
제목 설명
문제 풀이 사고방식
차례로 돌아가다
public ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null) return list2; if (list2 == null) return list1; if (list1.val <= list2.val) { list1.next = Merge(list1.next, list2); return list1; } else { list2.next = Merge(list1, list2.next); return list2; } }
교체하다
public ListNode Merge(ListNode list1, ListNode list2) {
ListNode head = new ListNode(-1); ListNode cur = head; while (list1 != null && list2 != null) { if (list1.val <= list2.val) { cur.next = list1; list1 = list1.next; } else { cur.next = list2; list2 = list2.next; } cur = cur.next; } if (list1 != null) cur.next = list1; if (list2 != null) cur.next = list2; return head.next; }
26. 나무의 자구조
NowCoder
제목 설명
문제 풀이 사고방식
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } private boolean isSubtreeWithRoot(TreeNode root1, TreeNode root2) { if (root2 == null) return true; if (root1 == null) return false; if (root1.val != root2.val) return false; return isSubtreeWithRoot(root1.left, root2.left) && isSubtreeWithRoot(root1.right, root2.right); }
27. 두 갈래 나무의 거울
NowCoder
제목 설명
문제 풀이 사고방식
public void Mirror(TreeNode root) {
if (root == null) return; swap(root); Mirror(root.left); Mirror(root.right); } private void swap(TreeNode root) { TreeNode t = root.left; root.left = root.right; root.right = t; }
28 대칭의 두 갈래 나무
NowCoder
제목 설명
문제 풀이 사고방식
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null)
return true; return isSymmetrical(pRoot.left, pRoot.right); } boolean isSymmetrical(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.val != t2.val) return false; return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left); }
29. 시계 방향으로 행렬 인쇄
NowCoder
제목 설명
다음 그림의 행렬은 시계 방향으로 인쇄된 결과: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
문제 풀이 사고방식
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>(); int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1; while (r1 <= r2 && c1 <= c2) { for (int i = c1; i <= c2; i++) ret.add(matrix[r1][i]); for (int i = r1 + 1; i <= r2; i++) ret.add(matrix[i][c2]); if (r1 != r2) for (int i = c2 - 1; i >= c1; i--) ret.add(matrix[r2][i]); if (c1 != c2) for (int i = r2 - 1; i > r1; i--) ret.add(matrix[i][c1]); r1++; r2--; c1++; c2--; } return ret; }
다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009020.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null) return false; return isSubtreeWithRoot(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } private boolean isSubtreeWithRoot(TreeNode root1, TreeNode root2) { if (root2 == null) return true; if (root1 == null) return false; if (root1.val != root2.val) return false; return isSubtreeWithRoot(root1.left, root2.left) && isSubtreeWithRoot(root1.right, root2.right); }
NowCoder
제목 설명
문제 풀이 사고방식
public void Mirror(TreeNode root) {
if (root == null) return; swap(root); Mirror(root.left); Mirror(root.right); } private void swap(TreeNode root) { TreeNode t = root.left; root.left = root.right; root.right = t; }
28 대칭의 두 갈래 나무
NowCoder
제목 설명
문제 풀이 사고방식
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null)
return true; return isSymmetrical(pRoot.left, pRoot.right); } boolean isSymmetrical(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.val != t2.val) return false; return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left); }
29. 시계 방향으로 행렬 인쇄
NowCoder
제목 설명
다음 그림의 행렬은 시계 방향으로 인쇄된 결과: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
문제 풀이 사고방식
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>(); int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1; while (r1 <= r2 && c1 <= c2) { for (int i = c1; i <= c2; i++) ret.add(matrix[r1][i]); for (int i = r1 + 1; i <= r2; i++) ret.add(matrix[i][c2]); if (r1 != r2) for (int i = c2 - 1; i >= c1; i--) ret.add(matrix[r2][i]); if (c1 != c2) for (int i = r2 - 1; i > r1; i--) ret.add(matrix[i][c1]); r1++; r2--; c1++; c2--; } return ret; }
다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009020.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
boolean isSymmetrical(TreeNode pRoot) {
if (pRoot == null)
return true; return isSymmetrical(pRoot.left, pRoot.right); } boolean isSymmetrical(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.val != t2.val) return false; return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left); }
NowCoder
제목 설명
다음 그림의 행렬은 시계 방향으로 인쇄된 결과: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
문제 풀이 사고방식
public ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList<Integer> ret = new ArrayList<>(); int r1 = 0, r2 = matrix.length - 1, c1 = 0, c2 = matrix[0].length - 1; while (r1 <= r2 && c1 <= c2) { for (int i = c1; i <= c2; i++) ret.add(matrix[r1][i]); for (int i = r1 + 1; i <= r2; i++) ret.add(matrix[i][c2]); if (r1 != r2) for (int i = c2 - 1; i >= c1; i--) ret.add(matrix[r2][i]); if (c1 != c2) for (int i = r2 - 1; i > r1; i--) ret.add(matrix[i][c1]); r1++; r2--; c1++; c2--; } return ret; }
다음으로 전송:https://www.cnblogs.com/daimasanjiaomao/p/11009020.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.