Java-20180419
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中形式不变。
Java-20180419的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- JAVA中的Log4j
Log4j的简介: 使用异常处理机制==>异常 使用debug调试(必须掌握) System.out.Print(); 001.控制台行数有限制 002.影响性能 ...
- Java 8 Date-Time API概览
更新时间:2018-04-19 根据网上资料整理 java 8增加了新的Date-Time API (JSR 310),增强对日期与时间的处理.它在很大程度上受到Joda-Time的影响.之前写过一篇 ...
- 【Java】 秒转时分秒天
总有时候会有些需求, 需要用到秒, 比如 JedisCluster 设置过期时间 现在有一个需求是 : 查询接口的缓存设置有效期为:1天+随机时间 基本可以按以下来做: package com.lwc ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
随机推荐
- jdk1.8-LinkedList源码分析
一:类的继承关系 我们看下类的继承关系 ) ) )) { ; i > index; i--) //当前记录结点等于上一节点 x = x.prev; //返回索引为index的点! return ...
- moby、docker-ce与docker-ee的区别
近期研究docker相关技术,发现官网分为moby.docker-ce与docker-ee不同板块,ce和ee版本好理解,但2017年开始又多出个Moby,开始有点凌乱,Google出如下解释,mar ...
- CentOS6.5升级手动安装GCC4.8.2 转载
一.简易安装 操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2 不能通过yum的方法升级,需要自己手动下载安装包并编译 1.1 获取安装包并 ...
- C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化
C++类有几种类型的数据成员:普通类型.常量(const).静态(static).静态常量(static const).这里分别探讨以下他们在C++11之前和之后的初始化方式. c++11之前版本的初 ...
- VM虚拟机网络设置
两台PC安装了虚拟机和XP,采用“桥接”模式,设置了两个虚拟机的地址为同网段.但发现飞Q可以联通,数据库无法连接,且ping不通. 解决: (1)将防火墙关闭. (2)通过“虚拟网络编辑器”将该网络桥 ...
- Vue实现点击时间获取时间段查询功能
二话不说,先上图 实现如上代码: //获取本周第一天 showWeekFirstDay: function () { let Nowdate = new Date(); let WeekFirstDa ...
- 【POJ - 3187】Backward Digit Sums(搜索)
-->Backward Digit Sums 直接写中文了 Descriptions: FJ 和 他的奶牛们在玩一个心理游戏.他们以某种方式写下1至N的数字(1<=N<=10). 然 ...
- OKR工作法 目标明确的写下来 - 结果记录- 校准
1.o - objective - 旅程的目的地 - 方向 - 定性的 2.kr - key result - 旅途的下一跳和关键节点 - 定量的 - 需要停下来校准 ################ ...
- PowerShell学习记录
一.简介——连接 Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershe ...
- [转帖]忘记了MariaDB root密码的解决办法
忘记了MariaDB root密码的解决办法 https://www.cnblogs.com/liaojie970/p/6126322.html 貌似跟 mysql 是一样的. 1.停掉mariaDB ...