目录
1. 二叉树的中序遍历 🌟🌟
2. 两两交换链表中的节点 🌟🌟
3. 不同的子序列 🌟🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
1. 二叉树的中序遍历
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
示例 4:
输入:root = [1,2] 输出:[2,1]
示例 5:
输入:root = [1,null,2] 输出:[1,2]
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
出处:
https://edu.csdn.net/practice/26377830
代码:
import java.util.*;
public class isSymmetric {
public final static int NULL = Integer.MIN_VALUE; //用NULL来表示空节点
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public static class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (cur != null || !stack.isEmpty()) {
if (cur != null) {
stack.push(cur);
cur = cur.left;
} else {
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
}
return list;
}
}
public static TreeNode createBinaryTree(Vector<Integer> vec) {
if (vec == null || vec.size() == 0) {
return null;
}
Queue<TreeNode> queue = new LinkedList<>();
TreeNode root = new TreeNode(vec.get(0));
queue.offer(root);
int i = 1;
while (!queue.isEmpty()) {
int size = queue.size();
for (int j = 0; j < size; j++) {
TreeNode node = queue.poll();
if (i < vec.size() && vec.get(i) != NULL) {
node.left = new TreeNode(vec.get(i));
queue.offer(node.left);
}
i++;
if (i < vec.size() && vec.get(i) != NULL) {
node.right = new TreeNode(vec.get(i));
queue.offer(node.right);
}
i++;
}
}
return root;
}
public static void main(String[] args) {
Solution s = new Solution();
Integer[] nums = {1,NULL,2,3};
Vector<Integer> vec = new Vector<Integer>(Arrays.asList(nums));
TreeNode root = createBinaryTree(vec);
System.out.println(s.inorderTraversal(root));
Integer[] nums2 = {1,NULL,2};
vec = new Vector<Integer>(Arrays.asList(nums2));
root = createBinaryTree(vec);
System.out.println(s.inorderTraversal(root));
Integer[] nums3 = {3,9,20,NULL,NULL,15,7};
vec = new Vector<Integer>(Arrays.asList(nums3));
root = createBinaryTree(vec);
System.out.println(s.inorderTraversal(root));
}
}
输出:
[1, 3, 2]
[1, 2]
[9, 3, 15, 20, 7]
2. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
示例 2:
输入:head = [] 输出:[]
示例 3:
输入:head = [1] 输出:[1]
提示:
- 链表中节点的数目在范围
[0, 100]
内 0 <= Node.val <= 100
进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。)
出处:
https://edu.csdn.net/practice/26377831
代码:
import java.util.*;
public class swapPairs {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public static class Solution {
public static ListNode swapPairs(ListNode head) {
ListNode list1 = new ListNode(0);
list1.next = head;
ListNode list2 = list1;
while (head != null && head.next != null) {
list2.next = head.next;
head.next = list2.next.next;
list2.next.next = head;
list2 = list2.next.next;
head = list2.next;
}
return list1.next;
}
}
public static ListNode createLinkedList(int[] nums) {
if (nums == null || nums.length == 0) {
return null;
}
ListNode head = new ListNode(nums[0]);
ListNode cur = head;
for (int i = 1; i < nums.length; i++) {
cur.next = new ListNode(nums[i]);
cur = cur.next;
}
return head;
}
public static void printLinkedList(ListNode head) {
ListNode cur = head;
while (cur != null) {
System.out.print(cur.val + "->");
cur = cur.next;
}
System.out.println("null");
}
public static void main(String[] args) {
Solution s = new Solution();
int[] nums = {1,2,3,4};
ListNode head = createLinkedList(nums);
printLinkedList(head);
head = s.swapPairs(head);
printLinkedList(head);
int[] nums2 = {1,2,3,4,5};
head = createLinkedList(nums2);
printLinkedList(head);
head = s.swapPairs(head);
printLinkedList(head);
}
}
输出:
1->2->3->4->null
2->1->4->3->null
1->2->3->4->5->null
2->1->4->3->5->null
3. 不同的子序列
给定一个字符串 s
和一个字符串 t
,计算在 s
的子序列中 t
出现的个数。
字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"
是 "ABCDE"
的一个子序列,而 "AEC"
不是)
题目数据保证答案符合 32 位带符号整数范围。
示例 1:
输入:s = "rabbbit", t = "rabbit"
输出:3
解释:
如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。
rabbbit
rabbbit
rabbbit
示例 2:
输入:s = "babgbag", t = "bag"
输出:5
解释:
如下图所示, 有 5 种可以从 s 中得到 "bag" 的方案。
babgbag
babgbag
babgbag
babgbag
babgbag
提示:
0 <= s.length, t.length <= 1000
-
s
和t
由英文字母组成
出处:
https://edu.csdn.net/practice/26377832
代码:
import java.util.*;
class numDistinct {
public static class Solution {
public int numDistinct(String s, String t) {
int n1 = s.length();
int n2 = t.length();
int[][] dp = new int[n1 + 1][n2 + 1];
for (int i = 0; i <= n1; i++) {
dp[i][0] = 1;
}
for (int i = 1; i <= n1; i++) {
for (int j = 1; j <= n2; j++) {
if (s.charAt(i - 1) == t.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
return dp[n1][n2];
}
}
public static void main(String[] args) {
Solution sol = new Solution();
String s = "rabbbit";
String t = "rabbit";
System.out.println(sol.numDistinct(s, t));
s = "babgbag";
t = "bag";
System.out.println(sol.numDistinct(s, t));
}
}
输出:
3
5
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富! 文章来源:https://www.toymoban.com/news/detail-424788.html
☸ 主页:https://hannyang.blog.csdn.net/ 文章来源地址https://www.toymoban.com/news/detail-424788.html
Golang每日一练 专栏 |
|
Python每日一练 专栏 |
|
C/C++每日一练 专栏 |
|
Java每日一练 专栏 |
到了这里,关于Java每日一练(20230424)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!