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的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. JAVA中的Log4j

    Log4j的简介: 使用异常处理机制==>异常 使用debug调试(必须掌握)    System.out.Print(); 001.控制台行数有限制        002.影响性能      ...

  3. Java 8 Date-Time API概览

    更新时间:2018-04-19 根据网上资料整理 java 8增加了新的Date-Time API (JSR 310),增强对日期与时间的处理.它在很大程度上受到Joda-Time的影响.之前写过一篇 ...

  4. 【Java】 秒转时分秒天

    总有时候会有些需求, 需要用到秒, 比如 JedisCluster 设置过期时间 现在有一个需求是 : 查询接口的缓存设置有效期为:1天+随机时间 基本可以按以下来做: package com.lwc ...

  5. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  6. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  7. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  8. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  9. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  10. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

随机推荐

  1. Aes加密/解密示例项目

    #AesEncrypt:Aes加密/解密示例项目 <br> 附件中的“AesEncrypt.zip”是本项目的exe文件,可直接下载下来运行和查看. *高级加密标准(英语:Advanced ...

  2. java:工具(汉语转拼音,压缩包,EXCEL,JFrame窗口和文件选择器,SFTP上传下载,FTP工具类,SSH)

    1.汉语转拼音: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuP ...

  3. LeetCode.1128-等价多米诺骨牌对的数量(Number of Equivalent Domino Pairs)

    这是小川的第394次更新,第428篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第259题(顺位题号是1128).给定多米诺骨牌列表,当且仅当(a == c且b == d ...

  4. 【MapReduce】三、MapReduce运行机制

      通过前面对map端.reduce端以及整个shuffle端工作流程的介绍,我们已经了解了MapReduce的并行运算模型,基本可以使用MapReduce进行编程,那么MapRecude究竟是如何执 ...

  5. 【DSP开发】mailbox的使用

    在DSP项目开发中,我用mailbox实现了进程间的通信,通过接收网络控制进程发来的mailbox,实现了云台的控制,其中需要学习的地方有两点:一是mailbox通信机制的学习,二是DSP时间管理机制 ...

  6. python 学习笔记三 (元编程)

    #动态创建类 # type(class_name, tuple_of_parent_class, dict_of_attribute_names_and_values), 第二个参数为继承关系,可以为 ...

  7. redis缓存穿透00

    缓存穿透 缓存穿透,是指查询一个数据库一定不存在的数据.正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存.如果数据库 ...

  8. SpringBoot项目打成Jar包时运行

    使用java -jar ***.jar执行jar包的时候,会找jar包中的main()方法. 对于SpringBoot项目的Jar包,在META-INF目录下的MANIFEST.MF文件中,Main- ...

  9. Magento2入门之修改logo

    本文用于学习记录用 1.主题创建是在路径 /app/design/frontend/公司名/主题名称/ 我自己创建的路径为 app/design/frontend/Bman/castle,以下操作都在 ...

  10. Dasha and Photos CodeForces - 761F (前缀优化)

    大意: 给定n*m初始字符矩阵, 有k个新矩阵, 第$i$个矩阵是由初始矩阵区间赋值得到的, 求选择一个新矩阵, 使得其余新矩阵到它距离和最小. 字符集比较小, 可以考虑每次区间覆盖对每个字符的贡献. ...