文章讲解:59.螺旋矩阵II
状态:学习
一、59.螺旋矩阵II
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
算法:数学模拟
难点:确定循环不变量
思路:
首先要循环结束的条件,我们可以通过n=4,n=5进行模拟,
while的条件可以设置为来sum<=n*n
其次要提前确定循环不变量,即循环区间,分为区间左闭右闭,左闭右开两种
对于这一道题目来说,两个都可以,作者就选择了左闭右闭;
import java.util.Scanner;
public class exam {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[][] num=new int[n][n];
int count=1;
int up=0,left=0,right=n-1,down=n-1;
while(count<= n*n)
{
//顶层
for(int i=left;i<=right;i++){
num[up][i]=count++;}
up++;
for(int i=up;i<=down;i++){
num[i][right]=count++;}
right--;
for(int i=right;i>=left;i--){
num[down][i]=count++;}
down--;
for(int i=down;i>=up;i--){
num[i][left]=count++;}
left++;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
System.out.print(num[i][j]+" ");
}
}
}
二、203.移除链表元素
给你一个链表的头节点 head 和一个整数 val ,
请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
一道简单链表题
链表的删除就是逻辑删除,
pre.next=p.next
import java.util.Scanner;
class ListNode{
int val;
ListNode next;
ListNode(int val){
this.val=val;
}
}
public class exam {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int val=sc.nextInt();
ListNode head=new ListNode(0);
ListNode pre=head;
ListNode p=head;
for(int i=1;i<7;i++){
ListNode node=new ListNode(i);
node.next=p.next;
p.next=node;
}
while(p!=null){
if(p.val==val)
{
pre.next=p.next;
}else{
pre=p;
}
p=p.next;
}
ListNode w=head;
while(w!=null){
System.out.println(w.val);
w=w.next;
}
}
}
总结
59.螺旋矩阵II:就是简单数学模拟,提前确定循环不变量,循环结束条件,顶层,右边,底层,左边的顺序
203.移除链表元素:链表的删除就是逻辑上的删除,pre.next=p.next