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盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
随机推荐
- Invalid Django TIME_ZONE
在linux操作系统运行,设置的时区在系统文件/usr/share/zoneinfo/中找不到会出现以下错误 raceback (most recent call last): File , in & ...
- Ubuntu18.04两步纯小白傻瓜无脑式安装Caffe
前言 Ubuntu16安装caffe过于繁琐,然而Ubuntu18安装起来却仅仅两步而已 附上官方安装教程:http://caffe.berkeleyvision.org/install_apt.ht ...
- 华为HCNA乱学Round 11:PPPOE
- pypy3.6的下载地址和安装第三方依赖
1.不同版本的下载链接 建议使用此链接:https://bitbucket.org/pypy/pypy/downloads/ 官网的:http://doc.pypy.org/en/latest/rel ...
- 快速排序基本思想,递归写法,python和java编写快速排序
1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1], ...
- 【Linux开发】编写属于你的第一个Linux内核模块
曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方-- 内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了.Linux内核和它的用户空间是大 ...
- 论文阅读 | Generating Fluent Adversarial Examples for Natural Languages
Generating Fluent Adversarial Examples for Natural Languages ACL 2019 为自然语言生成流畅的对抗样本 摘要 有效地构建自然语言处 ...
- LeetCode | DP专题详解
221 medium 221. Maximal Square Medium Given a 2D binary matrix filled with 0's and 1's, find the ...
- 语言模型评价指标Perplexity
在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度.它也可以用来比较两个概率分布或概率模型.(应该是比较两者在预测样本上的优劣)低困惑度的概率分布模型或概率模型 ...
- docker数据卷学习-利用数据卷实现mysql的快速恢复和迁移
docker数据卷学习 一 新建带有数据卷的容器 1.从docker hub下载centos7镜像 # docker pull centos 2. 创建container # docker run - ...