Java面向对象第三周及LeetCode832题解

一、面向对象之多态

1.多态是同一个行为具有多个不同表现形式或形态的能力,对象多种表现形式的体现.
2.原因:Java引用变量有两个类型:一个是编译时类型,另一个是运行时类型.编译类型由声明变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定.如果编译时类型和运行时类型不一致,就可能出现多态的情况.
3.存在的条件:(1)继承(2)重写(3)父类引用对象指向子类
如:Fu f=new Zi();

二、异常

1.异常:指的就是非正常情况的错误.
2.Java的异常机制主要依赖与try、catch、finally、throw、throws五个关键字,其中try关键字后紧跟一个花括号括起来的代码块,简称try块,它内置放置可能引发异常的代码块.catch后对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块.多个catch块后跟一个finally块,finally块用于回收在try块里打开的物理资源,异常机制会保证finally块总被执行.throws关键字主要在方法签名中使用,用于声明该方法可能抛出的异常;而throw用于抛出一个实际的异常,throw可以作为语句使用,抛出一个具体的异常对象.
如:try
{
程序代码
}catch(异常类型 异常的变量名)
{
Catch 块
}

try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}

throw new IllegalArgumentException();

三、LeetCode832题解

1.给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。

水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。

反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。
思路:首先遍历每一行,定义两个左右指针,左指针从左向右,右指针从右向左遍历,数字不同继续遍历(因为翻转再反转后其实该数字没有改变,如[1,1,0],翻转后为[0,1,1],反转后为[1,0,0],第一个和第三个数字没有改变),数字相同不交换位置,直接将0变为1、1变为0,如果指针指向同一位置,说明行元素为奇数个,我们直接将0变为1、1变为0.
代码:

  class Solution {
   public int[][] flipAndInvertImage(int[][] A) {
	for (int i = 0; i < A.length; i++) {//从左遍历数组
		int a = 0, b = A[i].length - 1;//右指针
		while (a < b) {
			if (A[i][a] != A[i][b]) {
				a++;
				b--;
			} else {
				A[i][a] = A[i][a] == 1 ? 0 : 1;//等于1变为0,不等变为0
				A[i][b] = A[i][b] == 1 ? 0 : 1;//等于1变为0,不等变为0
				a++;
				b--;
			}
		}
		if (a == b) {
			A[i][a] = A[i][a] == 1 ? 0 : 1;
		}
	}
	return A;
 }
}

猜你喜欢

转载自blog.csdn.net/qq_43928088/article/details/103527936