顺时针旋转矩阵
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
for i 0->n-1(代表列)
for j n-1->0(代表行)
a[i][n-j-1]=mat[j][i];
public int[][] rotateMatrix(int[][] mat, int n) {
// write code here
int[][] a=new int[n][n];
for(int i=0;i<n;i++)
{
for(int j=n-1;j>=0;j--)
{
a[i][n-j-1]=mat[j][i];
}
}
return a;
}
判断链表是否回文
//使用快慢指针来寻找链表中间的节点
public class PalindromeList {
public boolean chkPalindrome(ListNode A){
ListNode fast=A;
ListNode slow=A;
ListNode nextHead=null;
if(A==null||A.next==null)
{
return true;
}
//注意,如果只使用fast.next.next!=null作为判断条件会报空指针的问题。加入fast走到最后,fast.next为空。fast.next.next会报错。但是加上判断fast.next!=null即可因为&&的短路,第二个判断条件不会执行
while (fast.next!=null&&fast.next.next!=null)
{
fast=fast.next.next;
slow=slow.next;
}
nextHead=reverseList(slow.next);
while (nextHead!=null)
{
if(A.val==nextHead.val){
nextHead=nextHead.next;
A=A.next;
}else {
return false;
}
}
return true;
}
//使用两个指针来进行链表的翻转
public ListNode reverseList(ListNode head)
{
if(head==null||head.next==null)
{
return head;
}
ListNode tail=null;
while (head!=null)
{
ListNode next=head.next;
head.next=tail;
tail=head;
head=next;
}
//最后tail是新链表的头指针
return tail;
}
}