• Fizz Buzz

    class Solution {

    public List<String> fizzBuzz(int n) {

    List<String> list=new LinkedList<>();

    for (int i = 1; i <=n; i++) {

    if (i%3==0&&i%5==0) {

    list.add("FizzBuzz");

    continue;

    }else if (i%3==0) {

    list.add("Fizz");

    continue;

    }else if (i%5==0) {

    list.add("Buzz");

    continue;

    }

    list.add(String.valueOf(i));

    }

    return list;

    }

    }

  • 计数质数

  • 很快的方法

    class Solution {

    public int countPrimes(int n) {

    if (n<3) {

    return 0;

    }

    int res=0;

    boolean[] notPrime=new boolean[n];//默认都为false

    for (int i = 2; i < n; i++) {

    if (!notPrime[i]) {

    res++;

    for (int j = 2; i*j < n; j++) {

    notPrime[i*j]=true;

    }

    }

    }

    return res;

    }

    }

  • 我的解法:耗时间

    class Solution {

    public int countPrimes(int n) {

    if (n==0||n==1||n==2) {

    return 0;

    }

    int res=0;

    for (int i = 2; i < n; i++) {

    boolean isPrimes=true;

    for (int j = 2; j <=Math.sqrt(i); j++) {

    if (i%j==0) {

    isPrimes=false;

    break;

    }

    }

    if (isPrimes) {

    res++;

    }

    }

    return res;

    }

    }

  • 3的幂

在解这道题的时候。首先要明确地将整数划分为两大部分,即小于等于零(此时没有幂,log x 其中x>0)

和大于零的部分;

在大于零的部分又可以划分为1和不能被3整除(则不是3的幂次方)和能被3整除的!

  • 递归法

    class Solution {

    public boolean isPowerOfThree(int n) {

    if (n==0) {

    return false;

    }else if (n==1) {

    return true;

    }else if (n%3==0) {

    return isPowerOfThree(n/3);

    }else {

    return false;

    }

    }

    }

  • 循环法

    class Solution {

    public boolean isPowerOfThree(int n) {

    if (n<1) {

    return false;

    }

    while (n!=1) {

    if (n%3!=0) {

    return false;

    }else {

    n/=3;

    }

    }

    return true;

    }

    }

  • 数学方法log10

    class Solution {

    public boolean isPowerOfThree(int n) {

    if (n<1) {

    return false;

    }

    double d=Math.log10(n)/Math.log10(3);

    return (d-(int)d)==0?true:false;

    }

    }

  • 罗马数字转整数

  • 我的解法:

    有点暴力,虽然代码很多,但很好理解,写出这么长的代码我确实好菜!!!

    因为没看清题目,人家都说了这六种特殊情况是因为小的在大的左边 蠢到家!!

    class Solution {

    public int romanToInt(String s) {

    int res=0;

    char[] cs=s.toCharArray();

    int len=cs.length;

    int i=len-1;

    int f=len-2;

    StringBuffer st=new StringBuffer();

    StringBuffer sp=new StringBuffer();

    //现将特殊和单个分为两个数组

    while (i>=0||f>=0) {

    try {

    if (cs[i]=='V'&&cs[f]=='I') {//1

    st.append(cs[f]);

    st.append(cs[i]);

    i-=2;

    f-=2;

    }else if (cs[i]=='X'&&cs[f]=='I') {//2

    st.append(cs[f]);

    st.append(cs[i]);

    i-=2;

    f-=2;

    }else if (cs[i]=='L'&&cs[f]=='X') {//3

    st.append(cs[f]);

    st.append(cs[i]);

    i-=2;

    f-=2;

    }else if (cs[i]=='C'&&cs[f]=='X') {//4

    st.append(cs[f]);

    st.append(cs[i]);

    i-=2;

    f-=2;

    }else if (cs[i]=='D'&&cs[f]=='C') {//5

    st.append(cs[f]);

    st.append(cs[i]);

    i-=2;

    f-=2;

    }else if (cs[i]=='M'&&cs[f]=='C') {//6

    st.append(cs[f]);

    st.append(cs[i]);

    i-=2;

    f-=2;

    }

    else if (cs[i]=='I') {

    sp.append(cs[i]);

    i--;

    f--;

    }else if (cs[i]=='V') {

    sp.append(cs[i]);

    i--;

    f--;

    }else if (cs[i]=='X') {

    sp.append(cs[i]);

    i--;

    f--;

    }else if (cs[i]=='L') {

    sp.append(cs[i]);

    i--;

    f--;

    }else if (cs[i]=='C') {

    sp.append(cs[i]);

    i--;

    f--;

    }else if (cs[i]=='D') {

    sp.append(cs[i]);

    i--;

    f--;

    }else if (cs[i]=='M') {

    sp.append(cs[i]);

    i--;

    f--;

    }

    } catch (Exception e) {//这里还越界,通过抛出异常处理

    // TODO: handle exception

    sp.append(cs[i]);

    i--;

    }

    }

    char[] st1=st.toString().toCharArray();

    char[] sp1=sp.toString().toCharArray();

    int lenst=st1.length;

    int i1=lenst-1;

    int f1=lenst-2;

    //对特殊数组取值

    while (i1>=0||f1>=0) {

    if (st1[i1]=='V'&&st1[f1]=='I') {//1

    res+=4;

    i1-=2;

    f1-=2;

    }else if (st1[i1]=='X'&&st1[f1]=='I') {//2

    res+=9;

    i1-=2;

    f1-=2;

    }else if (st1[i1]=='L'&&st1[f1]=='X') {//3

    res+=40;

    i1-=2;

    f1-=2;

    }else if (st1[i1]=='C'&&st1[f1]=='X') {//4

    res+=90;

    i1-=2;

    f1-=2;

    }else if (st1[i1]=='D'&&st1[f1]=='C') {//5

    res+=400;

    i1-=2;

    f1-=2;

    }else if (st1[i1]=='M'&&st1[f1]=='C') {//6

    res+=900;

    i1-=2;

    f1-=2;

    }

    }

    int lensp=sp1.length;

    int i2=lensp-1;

    //对单个数组取值

    while (i2>=0) {

    if (sp1[i2]=='I') {

    res+=1;

    i2--;

    }else if (sp1[i2]=='V') {

    res+=5;

    i2--;

    }else if (sp1[i2]=='X') {

    res+=10;

    i2--;

    }else if (sp1[i2]=='L') {

    res+=50;

    i2--;

    }else if (sp1[i2]=='C') {

    res+=100;

    i2--;

    }else if (sp1[i2]=='D') {

    res+=500;

    i2--;

    }else if (sp1[i2]=='M') {

    res+=1000;

    i2--;

    }

    }

    return res;

    }

    }

  • 大神解法:利用map,挺好!

    class Solution {

    public int romanToInt(String s) {

    Map<Character, Integer> hashMap = new HashMap<>();

    // I 1

    // V 5

    // X 10

    // L 50

    // C 100

    // D 500

    // M 1000

    hashMap.put('I', 1);

    hashMap.put('V', 5);

    hashMap.put('X', 10);

    hashMap.put('L', 50);

    hashMap.put('C', 100);

    hashMap.put('D', 500);

    hashMap.put('M', 1000);

    int sum=0;

    char[] cs=s.toCharArray();

    for (int i = cs.length-1; i>=0; i--) {

    //处理六种特殊情况,即大的在右,小的在左

    if ((i-1)>=0&&hashMap.get(cs[i])>hashMap.get(cs[i-1])) {

    sum+=hashMap.get(cs[i])-hashMap.get(cs[i-1]);

    i--;

    }else {

    //处理单个的情况

    sum+=hashMap.get(cs[i]);

    }

    }

    return sum;

    }

    }

算法练习LeetCode初级算法之数学的更多相关文章

  1. 【LeetCode算法】LeetCode初级算法——字符串

      在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...

  2. 算法练习LeetCode初级算法之链表

    删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ...

  3. 算法练习LeetCode初级算法之字符串

    反转字符串 我的解法比较low,利用集合的工具类Collections.reverse反转,用时过长 class Solution { public void reverseString(char[] ...

  4. 算法练习LeetCode初级算法之数组

    删除数组中的重复项 官方解答: 旋转数组 存在重复元素 只出现一次的数     官方解答:  同一个字符进行两次异或运算就会回到原来的值 两个数组的交集 II import java.util.Arr ...

  5. 算法练习LeetCode初级算法之其他

    位1的个数 解法一: class Solution { // you need to treat n as an unsigned value public int hammingWeight(int ...

  6. 算法练习LeetCode初级算法之设计问题

    打乱数组 不断的让第一个与后面随机选择的数交换 class Solution { private int[] nums; private int[] initnums; public Solution ...

  7. 算法练习LeetCode初级算法之动态规划

    爬楼梯:斐波那契数列 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 非递归解法 class S ...

  8. 算法练习LeetCode初级算法之排序和搜索

    合并两个有序数组 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { System.arrayco ...

  9. 算法练习LeetCode初级算法之树

    二叉树的前序遍历 我的解法:利用递归,自底向下逐步添加到list,返回最终的前序遍历list class Solution { public List<Integer> preorderT ...

随机推荐

  1. 2018-2019-2 20175236实验二《Java面向对象程序设计》实验报告

    实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux基础的同学建议先学习<Lin ...

  2. 用最简单的话告诉你什么是ElasticSearch

    介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 L ...

  3. qnx i2c 学习 二

    File still Updating.... many errors have been FOUND , need big change  qnx i2c structure  --written ...

  4. 如何成功打造一款中台(PaaS)产品

    现如今,很多互联网公司在向“大中台,小前台”方向靠拢,通过打造高度可用.高度可定制的中台,来支撑前台业务的快速发展.个性化功能定制.但在构建中台产品(即所谓公司级平台)的时候,如何能成功让一款产品从0 ...

  5. C#添加VisionPro控件问题

    安装完VisionPro8.2版本以后,用VS2013调用时,没有默认在工具箱内,那么就需要手动添加了,选择菜单栏---->工具----->选择工具箱项,如下图所示:           ...

  6. shell编程简介

    前言 什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, ...

  7. !!常用HTML5代码

    HTML5提供的新特性 2016-2-16 Web Socket 定义了一套API, 允许网页能够使用Web Socket协议来和远程主机进行双工通信. Web Storage 定义了一套API, 能 ...

  8. web 安全:

    XSSXSS 全称“跨站脚本”,是注入攻击的一种. 其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容文本. 这时服务器端如果没有过 ...

  9. 05 JS基础DOM

    JS的window对象定时器: window下一些方法: <script> 弹出 window.alert('hello') 返回布尔值 var ret = window.confirm( ...

  10. js 序列化

    Python 序列化 字符串 = json.dumps(对象)  对象转字符串 对象 = json.loads(字符串)   字符串转对象 Javascript 字符串 = JSON.stringif ...