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盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
随机推荐
- DES加密解密工具
using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace DESP ...
- 解决anaconda安装cvxpy失败的方法
在Windows下安装凸优化包CVXPY 直接在anaconda prompt中输入pip install cvxpy经常会出现安装失败的情况,使用以下方法,亲测成功! 1. 下载所需的whl文件,请 ...
- Shell初学(五)bash shell的基本功能
记住,所谓的bash shell 并不单纯指的是shell脚本,其实是Linux系统的所有指令集. shell脚本 只是汇总了指令集到文件,然后按流程和顺序执行. [1]如何查看我们的预设shell ...
- 小记---------spark架构原理&主要组件和进程
spark的主要组件和进程 driver (进程): 我们编写的spark程序就在driver上,由driver进程执行 master(进程): 主要负责资源的 ...
- 从入门到自闭之Python函数初识
函数初识 定义:def--关键字 将某个功能封装到一个空间中就是一个函数 功能: 减少重复代码 函数的调用 函数名+():调用函数和接收返回值 函数的返回值 return 值 == 返回值 ...
- java限流工具类
代码 import com.google.common.util.concurrent.RateLimiter; import java.util.concurrent.ConcurrentHashM ...
- Ansible PlayBook语法
PlayBook语法实例 playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过Ansible中的tasks定义好的角色(play的内容被称为ta ...
- CentOS 7系统安装Jenkins
一.jenkins 介绍 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码> 的编译.打包.部署)基于web界面的平台. 简单说,就是各种项目的"自动化" ...
- Linux系统定时备份网站文件到七牛云存储脚本
1.七牛云账号注册. 有些朋友可能会问为什么要备份到七牛云?很简单,七牛云免费注册就能获取1G的存储空间,只要简单几步操作完成实名认证即可获取10G的存储空间,对于一般个人站点来说已经足够备份使用了. ...
- 埋在 MYSQL 数据库应用中的17个关键问题!
Mysql的使用非常普遍,跟mysql有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份.集群.横向扩展.纵向扩展.负载均衡.读写分离等.要想掌握其中的精髓,可得花费不少功力,虽然目前流行 ...