潍坊汇聚网站,福州网站模板建站,加盟广告,宁波网站开发制作文章目录 6.Z字形变换82.删除排序链表中的重复元素||61.旋转链表100.相同的树 6.Z字形变换
将一个给定字符串 s 根据给定的行数 numRows #xff0c;以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时#xff0c;排列如下#xff1… 文章目录 6.Z字形变换82.删除排序链表中的重复元素||61.旋转链表100.相同的树 6.Z字形变换
将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时排列如下
P A H N
A P L S I I G
Y I R之后你的输出需要从左往右逐行读取产生出一个新的字符串比如“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数string convert(string s, int numRows);
输入s PAYPALISHIRING, numRows 3
输出PAHNAPLSIIGYIR输入s PAYPALISHIRING, numRows 4
输出PINALSIGYAHRPI
解释
P I N
A L S I G
Y A H R
P I输入s A, numRows 1
输出A82.删除排序链表中的重复元素||
给定一个已排序的链表的头 head 删除原始链表中所有重复数字的节点只留下不同的数字 。返回 已排序的链表 。
输入head [1,2,3,3,4,4,5]
输出[1,2,5]输入head [1,1,1,2,3]
输出[2,3]/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode deleteDuplicates(ListNode head) {if (head null) {return head;}ListNode node new ListNode(0, head);ListNode cur node;// 遍历链表直到倒数第二个节点while (cur.next ! null cur.next.next ! null) {// 如果当前节点和下一个节点的值相同if (cur.next.val cur.next.next.val) {// 记录重复值int x cur.next.val;// 删除所有重复的节点while (cur.next ! null cur.next.val x) {cur.next cur.next.next;}} else {cur cur.next;}}return node.next;}
}61.旋转链表
给你一个链表的头节点 head 旋转链表将链表每个节点向右移动 k 个位置。
输入head [1,2,3,4,5], k 2
输出[4,5,1,2,3]输入head [0,1,2], k 4
输出[2,0,1]class Solution {public ListNode rotateRight(ListNode head, int k) {if (k 0 || head null || head.next null) { // 如果旋转次数为0或者链表为空或只有一个节点直接返回原链表return head;}int n 1; // 初始化链表长度为1ListNode iter head; // 初始化迭代器指向头节点while (iter.next ! null) { // 遍历链表计算链表长度iter iter.next;n;}int add n - k % n; // 计算需要旋转的次数if (add n) { // 如果需要旋转的次数等于链表长度说明不需要旋转直接返回原链表return head;}iter.next head; // 将尾节点指向头节点形成环状链表while (add-- 0) { // 找到新的头节点和尾节点的位置iter iter.next;}ListNode ret iter.next; // 新的头节点iter.next null; // 断开环状链表return ret; // 返回新的头节点}}100.相同的树
给你两棵二叉树的根节点 p 和 q 编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同并且节点具有相同的值则认为它们是相同的。
输入p [1,2,3], q [1,2,3]
输出true输入p [1,2], q [1,null,2]
输出false输入p [1,2,1], q [1,1,2]
输出false/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val val;* this.left left;* this.right right;* }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {// 如果两个节点都为空说明它们相同if(pnull qnull){return true;}else if(pnull || qnull){ // 如果其中一个节点为空另一个不为空说明它们不相同return false;}else if(p.val!q.val){ // 如果两个节点的值不相等说明它们不相同return false;}else{ // 如果两个节点的值相等递归比较它们的左右子树return isSameTree(p.left,q.left) isSameTree(p.right,q.right);}}
}