热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将字符串数字拆分成单个数字_【LeetCode】842.将数组拆分成斐波那契序列

【LeetCode】842.SplitArrayintoFibonacciSequence将数组拆分成斐波那契序列(Medium)(JAVA)题目描述:Givenas

【LeetCode】842. Split Array into Fibonacci Sequence 将数组拆分成斐波那契序列(Medium)(JAVA)

题目描述:

Given a string S of digits, such as S = "123456579", we can split it into a Fibonacci-like sequence [123, 456, 579].

Formally, a Fibonacci-like sequence is a list F of non-negative integers such that:

  • 0 <&#61; F[i] <&#61; 2^31 - 1, (that is, each integer fits a 32-bit signed integer type);

  • F.length >&#61; 3;

  • and F[i] &#43; F[i&#43;1] &#61; F[i&#43;2] for all 0 <&#61; i Also, note that when splitting the string into pieces, each piece must not have extra leading zeroes, except if the piece is the number 0 itself.

Return any Fibonacci-like sequence split from S, or return [] if it cannot be done.

Example 1:

Input: "123456579"
Output: [123,456,579]

Example 2:

Input: "11235813"
Output: [1,1,2,3,5,8,13]

Example 3:

Input: "112358130"
Output: []
Explanation: The task is impossible.

Example 4:

Input: "0123"
Output: []
Explanation: Leading zeroes are not allowed, so "01", "2", "3" is not valid.

Example 5:

Input: "1101111"
Output: [110, 1, 111]
Explanation: The output [11, 0, 11, 11] would also be accepted.

Note:

  • 1 <&#61; S.length <&#61; 200

  • S contains only digits.

题目大意

给定一个数字字符串 S&#xff0c;比如 S &#61; "123456579"&#xff0c;我们可以将它分成斐波那契式的序列 [123, 456, 579]。

形式上&#xff0c;斐波那契式序列是一个非负整数列表 F&#xff0c;且满足&#xff1a;

  • 0 <&#61; F[i] <&#61; 2^31 - 1&#xff0c;(也就是说&#xff0c;每个整数都符合 32 位有符号整数类型)&#xff1b;

  • F.length >&#61; 3&#xff1b;

  • 对于所有的0 <&#61; i

另外&#xff0c;请注意&#xff0c;将字符串拆分成小块时&#xff0c;每个块的数字一定不要以零开头&#xff0c;除非这个块是数字 0 本身。

返回从 S 拆分出来的任意一组斐波那契式的序列块&#xff0c;如果不能拆分则返回 []。

解题方法

  1. 首先要看清楚例子&#xff0c;将数组拆分成斐波那契序列&#xff1a;数组里的每个元素不一定是相等的

  2. 所以要从第一个数字长度 i 从 1 到 S.length() / 2&#xff0c;第二个长度 j 也从 1 到 S.length() / 2&#xff0c;因为要满足至少三个&#xff0c;而且三个数字肯定大于前两个数组所以, S.length() - i - j >&#61; Math.max(i, j)

  3. 判断第三个是否是前两个的和&#xff0c;从 i &#43; j 位开始&#xff0c;判断接下来的部分是否 num1 &#43; num2 (我这里直接用的 string 的 startWith 方法&#xff0c;判断的方法很多)

  4. 后面不断循环&#xff0c;看是否能到能把所有字符判断完

  5. note: 这里还有很多可以优化的地方&#xff1a;1、可以不用创建新的字符串&#xff0c;这样可以节省空间&#xff0c;也不用 delete 字符&#xff1b;2、比较可以不用 startWith 方法&#xff0c;可以一个个 char 比较

class Solution {
    public List splitIntoFibonacci(String S) {List list &#61; new ArrayList<>();int max &#61; S.length() / 2;for (int i &#61; 1; i <&#61; max; i&#43;&#43;) {
            long num &#61; Long.parseLong(S.substring(0, i));if (num >&#61; Integer.MAX_VALUE) break;if (S.charAt(0) &#61;&#61; &#39;0&#39; && i > 1) continue;for (int j &#61; 1; j <&#61; max && (S.length() - i - j) >&#61; Math.max(i, j); j&#43;&#43;) {if (S.charAt(i) &#61;&#61; &#39;0&#39; && j > 1) continue;
                StringBuilder sb &#61; new StringBuilder(S);num &#61; Long.parseLong(S.substring(0, i));
                list &#61; new ArrayList<>();
                list.add((int) num);num &#61; Long.parseLong(S.substring(i, i &#43; j));if (num >&#61; Integer.MAX_VALUE) break;
                list.add((int) num);
                sb.delete(0, i &#43; j);while (sb.length() > 0) {int size &#61; list.size();num &#61; list.get(size - 1) &#43; list.get(size - 2);if (num >&#61; Integer.MAX_VALUE) break;if (!sb.toString().startsWith(num &#43; "")) break;
                    list.add((int) num);
                    sb.delete(0, (num &#43; "").length());
                }if (sb.length() &#61;&#61; 0 && list.size() >&#61; 3) return list;
            }
        }return new ArrayList<>();
    }
}

执行耗时:8 ms,击败了20.32% 的Java用户
内存消耗:38.7 MB,击败了66.05% 的Java用户

005381015035c6afdb8d6ad3fefc1785.png




推荐阅读
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • 求数组中字符串的最长公共前缀(Java)
    求数组中字符串的最长公共前缀(牛客网—牛客题霸算法篇—NC55)题目描述给你一个大小为n的字符串数组strs,其中包含n个字符串,编写一个函数来查找字符串数组中的最长公共前缀,返回 ... [详细]
author-avatar
php送
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有