1.leetcode第二题

给定两个链表,逆序转换为数值相加,在逆序输出新链表。

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

思路:算法刚开始是最朴素的想法,先将链表转换为整型,然后相加后再转换成链表

  

while(it1.hasNext()){p=it1.next();  s1=s1+p*t1;t1*=10;}  //链表转整形,p是从低到高各单值,t代表10的次方。
while(s!=0){leave=s%10;s=s/10;}  //整形数分解,leave表示从低到高的各单值。

后来发现测试集有数据超过了int型,改为long型仍然有两个数据超过,改为BigInteger类对象,最后一个数据超级大N位的那种,于是开始改思路。

可以用各位分别相加来计算,然后保留进位,终于第9次Acceptance。

代码:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {int flag=0;int s;s=(l1.val+l2.val+flag)%10;flag=(l1.val+l2.val+flag)/10;ListNode re=new ListNode(s);l1=l1.next;l2=l2.next;   //这一段的作用详见第3点while(l1!=null || l2!=null){if(l1==null){s=(l2.val+flag)%10;flag=(l2.val+flag)/10;ListNode newl=new ListNode(s);add(re,newl);l2=l2.next;}else if(l2==null){s=(l1.val+flag)%10;flag=(l1.val+flag)/10;ListNode newl=new ListNode(s);add(re,newl);l1=l1.next;}else{s=(l1.val+l2.val+flag)%10;flag=(l1.val+l2.val+flag)/10;ListNode newl=new ListNode(s);add(re,newl);l1=l1.next;l2=l2.next;}}if(flag==1){ListNode newl=new ListNode(1);add(re,newl);}return re;}void add(ListNode l,ListNode ll){if(l==null){l=ll;}while(l.next!=null){l=l.next;}l.next=ll;}

2.链表复习和BigInteger的初次接触

JAVA和C中的链表不同之处

JAVA中没有指针因此直接用类作为下节点引用:

class ListNode
{int val;ListNode next;ListNode(int x) { val = x; }
}

C:

typedef struct ListNode
{int val;struct ListNode *next;
}ListNode,*LinkList;   //C语言中结构体不管有没有typedef都有分号。

链表的遍历(简单)

while(l!=null)
{
//处理l.val
l=l.next;
}

链表的逆序遍历

if(l!=null)
{
if(l.next!=null)
{
//递归调用
}
//处理l.val
} //注意用if开始,while会陷入死循环。

一般来说使用long就足够,但有时见会遇到处理更大的数,这时我们就可以使用BigInteger对象,初始化BigInteger s=BigInteger.valueOf(10)

add(//BigInteger对象),subtract(),multiply(),divide()加减乘除操作。

divideAndRemainder()返回数组,第一个商,第二个余数。BigDecimal下次介绍。

3.遇见的问题

小问题1:文件名(类名)不能和引入的类名字相同。

小问题2:long超过int边界值后再强制转换为int会变成乱值。

Java的形参改变实参问题与C++的对比:

Java只能改变引用的值,只有类对象和数组(除去String和各基础类型(Integer、Double等)的引用)可以用作形参改变实参。

C++可以使用引用和指针。

只需再形参加上&引用符即可 声明形式void swap(int &a,int &b),调用形式 swap(a,b) 。

声明 void swap(int *a,int *b){函数体使用*a,*b},调用swap(&a,&b),而Java中形式不变。

4.Java第三章 面向对象程序设计(一)

(1)基础:一个Java文件中至多有一个public类,且文件名要和public类名相同。若没有public类,则文件名可以和任一个类名相同。

垃圾回收机制:若一个实例对象没有任何引用指向,那么它所占的内存就会成为垃圾,但JVM一般不会立即回收,会在适合的时机回收垃圾,不保证先申请就先回收,也不保证先成为垃圾就先回收。若要想手动回收可以点用System.gc()方法,这样会调用类的finalize()方法,而系统在程序执行完回收则不会调用。

(2)继承:三大特性之一,一个类最多继承一个直接父类。

super()和this()方法:super()在子类的构造函数中调用,用于初始化类成员,必须写在构造函数第一句,若不含任何参数,则可以省略不写。值得注意,若父类没有构造函数,会创建一个默认的无参构造函数;若父类只有有参数构造函数,则默认构造函数不会产生,那么子类必须显示调用super且必须含参数;

  隐式调用/super()无参 super()有参
有无参构造函数/没有构造函数 正确 错误
有有参构造函数 错误 正确
都有 正确 正确

而this()方法也是在构造函数中出现,必须写在第一行,所以与super()无法同时使用,用于调用其他重载构造方法。

上转型隐式调用:将子类对象复制给父类对象时成为上转型(upcasting),例如子类Square继承父类Shape,可以将父类的引用指向子类的对象,例如:Shape sh=new Square();

下转型显式调用:接上面语句,Square sq=(Square)sh;称为下转型(dwoncasting),但不能直接使用这句,因为只有sh在指向子类对象时才能下转,否则编译不会出错,但运行会出错。

instanceof:判断对象是否是某类的实例,对于没有转型来说,子类是所有超类及自身的实例,返回true,例如Square sq=new Square();则sq instanceof Square,sq instanceof Shape乃至sq instanceof Object都返回true;而父类不会是子类的实例,例如Shape sh=new Shape();sh instanceof Shape 返回true,但sh instanceof Square返回false;

对于上转型来说,父类便是子类的对象,例如 Shape sh=new Square();那么sh instanceof Square返回true;或者 Square sq=new Square(); Shape sh=sq;则sh instanceof Square,sh instanceof Shape,sq instanceof Square,sq instanceof Shape全都返回true;

对于下转型来说,由于父类肯定是上转型,所以不在讨论,子类与没有转型来说是相同的。

(3)多态:面向对象三大特征之一,分为静态多态,动态多态(即C++中的静态联编和动态联编)

静态多态:即重载(overload),方法的名称相同但参数不同,例如各个构造函数。注意参数类型相同但参数名不同不算重载,仍是相同的函数。

动态多态:即覆盖(override),指父类和子类方法参数类型和方法名完全相同,但JVM会识别出是哪一个调用。子类对象则调用子类方法,父类对象调用父类方法,上转型的父类调用子类方法,下转型的子类也调用子类方法。

super和this关键字:注意和前面super(),this()方法不相同,super可以使用在子类中非静态成员方法中用于访问父类型的成员,this用法与super相同,都是super.a,this.b,super.A(),this.B()形式,但是要调用本类的成员,主要用于区分局部变量和成员域(同名时),例如在很多set方法中都会有this.a=a类似的语句。

此外静态方法不具有动态多态性。

(4)包:包关键字package,必须是文件的第一句;

导入包语句有三种分别是:

import  wym.*;将整个wym包里的接口、类、枚举都导入。不会导入子包的类型。

import wym.Eat;将wym包中的Eat类型(接口、类、枚举其中之一)导入。

import static wym.Eat.main;将main静态方法导入。

第一种会增加程序开销,降低编译效率,尽量使用后两种。

(5)封装:三大特性之一

类的访问控制方式:pulic和默认(即什么修饰词也不加),public的类可以被所有包使用(不同包需要用import导入,在同一包中可见),而默认类只能被包内使用(在同一包中可见)。

类成员访问控制方式:四种类型public,protected,默认,private。

对于public的类成员,所有能够访问该类的类型定义体都能访问访问该成员。

对于protected的类成员,若所在类是默认模式,则其他包的成员不能访问,若所在类是public,比default多了其他包的子类方法能够访问。

对于默认的类成员,同一软件包能够访问,但是不同包一定不能访问。

对于private的类成员,只有本类成员方法才能访问。

所在类为public时的权限:

访问控制模式 在同一类内 在同一包内 子类 所有类
公共 允许 允许 允许 允许
保护 允许 允许 允许  
默认 允许 允许    
私有 允许      

所在类为默认时的权限:

访问控制模式 在同一类内 在同一包内 子类 所有类
公共 允许 允许    
保护 允许 允许    
默认 允许 允许    
私有 允许      

转载于:https://www.cnblogs.com/lbrs/p/8884454.html

Java-20180419相关推荐

  1. java idwork长度_java 字符串id

    Java FutureTask import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.c ...

  2. Get传递参数时发生java.lang.IllegalArgumentException异常

    功能:售后地址的验证 当用户点击某地址时,将地址信息传递到后台,再从后台调用接口,判断用户地址填写是否正确 解析地址功能的实现层代码(简化过的) publicvoidaddressResolution ...

  3. 学生管理系统(Java版)

    学生管理系统(Java版) 前言:这个是大二做的课设(还是学生管理系统-),理论上虽然是4个人一组一起做的,但是,注意这个"但是",还是我一个人承担了所有-代码和文档基本都是我一个 ...

  4. 微信第三方支付接口java调用详细文档

    1.显示支付二维码 支付流程 首先用户选好商品后 跳到结算页面 在点击支付提交时应先将表单的数据保存到数据库(一般都会有订单表一二级) 经过后台保存数据后再转发到前台(二维码是后台调用微信生成的) 看 ...

  5. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  6. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  7. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  8. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  9. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  10. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

最新文章

  1. 《CCNP TSHOOT 300-135认证考试指南》——2.2节故障检测与排除及网络维护工具箱
  2. mysql repalication_mysql replication(主从复制)(一)MS模式
  3. java编程赋值运算符_跟我学java编程—简单赋值运算符“=”
  4. web开发要学多久,HTML表格标签,薪资翻倍
  5. 12015.linux通过代码或命令形式操作内存/dev/mem
  6. 二、Sql Server 基础培训《进度2-关于主键(知识点学习)》
  7. 解决修改jsp代码之后,浏览器刷新页面却没有变化
  8. 《计算机网络实验》网络参数配置与常用网络命令使用,超级详细教程
  9. 霍夫丁不等式、马尔科夫不等式证明
  10. C语言文本输入中文乱码问题
  11. java汽车工厂类方法_Java设计模式学习之工厂模式
  12. Windows优化大师域名解析问题
  13. js中的includes用法
  14. CS61A Proj 4
  15. 【STM32H7教程】第24章 STM32H7的Cache解读(非常重要)
  16. 连接大智慧数据库接口
  17. 我不知道自己会什么了
  18. JDK的安装与环境变量的配置教程
  19. 实况摄像头,“偷窥” 世界美景!
  20. INSERT 语句 增加条件,条件成立插入,否则不插入

热门文章

  1. 苹果怎么删除通讯录联系人_苹果手机通讯录怎么恢复?这才是正确的打开方式!...
  2. 2021江西高考成绩6月23日几点查询,2021年江西高考成绩查询时间:6月23日
  3. excel VB代码
  4. 计算机可爱的企鹅教案,《可爱的企鹅》教学设计
  5. ios 给网页传值_ios常见的页面传值方式
  6. 打开桌面计算机窗口闪动,电脑进去桌面就一直闪
  7. java.sql 拒绝连接_java.sql.SQLException: ORA-01017: 用户名/口令无效; 登录被拒绝
  8. 的列数 获取mysql_阿里面试:MySQL如何设计索引更高效?
  9. win10 安装db2 10.1 并使用DBserver连接db2数据库
  10. Eclipse的.properties文件输出中文成unicode编码