当前位置: 首页 > news >正文

leetcode02——59. 螺旋矩阵 II、203. 移除链表元素

59. 螺旋矩阵 II

class Solution {public int[][] generateMatrix(int n) {int[][] nums = new int[n][n]; // 定义二维数组用于存储数据int startX = 0; // 定义每循环一个圈的起始位置int startY = 0;int loop = 1; // 定义圈数,最少1圈int count = 1; // 用来给矩阵中每一个空格赋值int offset = 1; // 需要控制每一条边遍历的长度,每次循环右边界收缩一位int i;int j;int mid = n/2; // 矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)// 每次一个转圈会让边长为n的矩阵减少2,那么2*循环次数=n,所以循环次数为n/2while (loop <= n/2)  {j = startY;i = startX;// 下面开始的四个for就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for ( ; j < n - offset; j++) {nums[i][j] = count++;}// 模拟填充右列从上到下(左闭右开)for ( ; i < n - offset; i++) {nums[i][j] = count++;}// 模拟填充下行从右到左(左闭右开)for ( ; j > startY; j--) {nums[i][j] = count++;}// 模拟填充左列从下到上(左闭右开)for ( ; i > startX; i--) {nums[i][j] = count++;}// 第二圈开始的时候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startX++;startY++;// offset 控制每一圈里每一条边遍历的长度offset++;loop++;}// 如果n为奇数的话,需要单独给矩阵最中间的位置赋值if (n%2 == 1) {nums[mid][mid] = count;}return nums;}
}

203. 移除链表元素

/*** 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; }* }*/
/**
notice:1.头结点的指向不能改变2.对链表结点取值前先判空*/ // 1.不使用虚拟头结点,直接在原链表删除
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode p = head;// 先判断头结点是否为空if (head == null) {return null;}// 要删除的节点为头结点while (head != null && head.val == val) {head = head.next;}// 要删除的节点不为头结点while (p.next != null) {if (p.next.val == val) {p.next = p.next.next;} else {p = p.next;}}return head;}
}
// 2.使用虚拟头结点
class Solution {public ListNode removeElements(ListNode head, int val) {// 设置虚拟头结点ListNode dummyHead = new ListNode();dummyHead.next = head;if (head == null) {return null;}ListNode cur = dummyHead;while (cur.next != null) {if (cur.next.val == val) {cur.next = cur.next.next;} else {cur = cur.next;}}// 避免头结点被删除的情况return dummyHead.next;}
}

707. 设计链表

//单链表
class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}
}
/**
插入数据就不要忘了将链表元素的个数+1
删除数据就不要忘了将链表元素的个数-1*/
class MyLinkedList {// size存储链表元素的个数int size;// 虚拟头结点ListNode dummyHead;// 初始化链表public MyLinkedList() {size = 0;dummyHead = new ListNode(0);}// 获取第index个节点的数值,注意index是从0开始的,第0个节点就是头结点public int get(int index) {// 如果index非法,返回-1if (index < 0 || index > size-1) {return -1;}ListNode cur = dummyHead;//包含一个虚拟头节点,所以查找第 index+1 个节点for (int i = 0; i <= index; i++) {cur = cur.next;}return cur.val;}public void addAtHead(int val) {ListNode newNode = new ListNode(val);newNode.next = dummyHead.next;dummyHead.next = newNode;size++; //不要忘了将链表元素的个数+1}public void addAtTail(int val) {ListNode newNode = new ListNode(val);ListNode cur = dummyHead;while (cur.next != null) {cur = cur.next;}cur.next = newNode;size++;}// 在第 index 个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。// 如果 index 等于链表的长度,则说明是新插入的节点为链表的尾结点// 如果 index 大于链表的长度,则返回空public void addAtIndex(int index, int val) {if (index > size) {return;}if (index < 0) {index = 0;}// 找到要插入节点的前驱ListNode pre = dummyHead;for (int i = 0; i < index; i++) {pre = pre.next;}ListNode newNode = new ListNode(val);newNode.next = pre.next;pre.next = newNode;size++;}public void deleteAtIndex(int index) {if (index < 0 || index >= size) {return;}//因为有虚拟头节点,所以不用对Index=0的情况进行特殊处理ListNode pre = dummyHead;for (int i = 0; i < index ; i++) {pre = pre.next;}pre.next = pre.next.next;size--;}
}/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList obj = new MyLinkedList();* int param_1 = obj.get(index);* obj.addAtHead(val);* obj.addAtTail(val);* obj.addAtIndex(index,val);* obj.deleteAtIndex(index);*/
http://www.lryc.cn/news/443763.html

相关文章:

  • Matlab Simulink 主时间步(major time step)、子时间步(minor time step)
  • docker 升级步骤
  • 828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
  • 2024 SNERT 预备队招新 CTF 体验赛-Web
  • 亲测全网10大“免费”论文降重神器!论文写作必备!
  • 二分算法——优选算法
  • Kafka 的基本概念
  • 《粮油与饲料科技》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • Python之一些列表的练习题
  • MoFA: 迈向AIOS
  • c语言中define使用方法
  • 尚品汇-秒杀商品定时任务存入缓存、Redis发布订阅实现状态位(五十一)
  • 第十一章 【后端】商品分类管理微服务(11.4)——spring-boot-devtools
  • MySQL篇(索引)(持续更新迭代)
  • 通用接口开放平台设计与实现——(31)API服务线程安全问题确认与修复
  • 2011-2022年数字金融与企业ESG表现:效应、机制与“漂绿”检验(内含原始数据+处理代码)
  • mysql配置相关命令
  • 【自用软件】IDM下载器 Internet Download Manager v6.42 Build 10
  • Kafka集群扩容(新增一台kafka节点)
  • 作文笔记15 点面结合
  • Spring Boot-国际化(I18N)问题
  • 8. 防火墙
  • C语言循环学习
  • 职业技能大赛-自动化测试笔记(Unitest)分享-3
  • rocky9.2的lvs的NAT模式下的基本使用的详细示例
  • AI健身之俯卧撑计数和姿态矫正-角度估计
  • Java ETL - Apache Beam 简介
  • 使用 Fairseq 进行音频预训练:Train a wav2vec 2.0 base model配置与实现
  • 全面详尽的 PHP 环境搭建教程
  • fiddler抓包06_抓取https请求(chrome)