当前位置: 首页 > 知识库问答 >
问题:

查找整数中相同数字的最长序列(Java)

司徒英卓
2023-03-14

我需要编写一个递归方法,将int作为输入,并以int(而不是字符串)的形式返回其中最长的相同数字序列。计数序列并不是最难的部分,但当给定一个包含几个序列的数字时,我不知道如何返回正确的值,而不计算所有的序列,而只计算最长的序列。目前,我编写了一段只计算序列长度的代码:

public static int equalDigits (int num)
{
    return equalDigits(num, num % 10);
}

private static int equalDigits (int num, int last)
{
    if (num == 0)
        return 0;
    if (num % 10 == last)
    {
        last = num % 10;
        return 1 + equalDigits(num/10, last);
    }
    last = num % 10;
    return equalDigits(num/10, last);
}

我真的很难完成剩下的事情。

共有1个答案

孔鹤龄
2023-03-14

正如@markspace所说,通过上述代码无法识别最长的序列。代码需要记录从中间开始的可能的新序列,这意味着可能需要为目标变量和粘贴索引变量都有存储空间。

以下代码应能解决此问题:

import java.util.Scanner;

public class Sequence {

    public int countDigit(int input, int target, int height, int lastIndex, int count) {
        if (input != 0) {
            int currIndex = input % 10;

            if (lastIndex != currIndex) {
                // Checks if it is an index from a new starting sequence,
                // remove previous count, then count++.
                count = 0;
                count++;
            } else {
                // same sequence, then count++.
                count++;
            }
            
            // Below two lines for display purpose only.
            System.out.println("Count of target [" + target + "]: " + height);
            System.out.println("Count of currIndex [" + currIndex + "]: " + count);

            if (count > height) {
                // Checks if a new height in count is reached,
                // modify count.
                height = count;
                if (target != currIndex) {
                    // Checks if the new height is by a different index,
                    // modify target.
                    target = currIndex;
                }
            }

            lastIndex = currIndex;
            return countDigit(input / 10, target, height, lastIndex, count);
        } else {
            // if no input is left,
            return target;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();

        Sequence sequence = new Sequence();

        System.out.println("Result: " + sequence.countDigit(input, 0, 0, 0, 0));

    }
}

输入为112999456,输出为:

Count of target [0]: 0
Count of currIndex [6]: 1
Count of target [6]: 1
Count of currIndex [5]: 1
Count of target [6]: 1
Count of currIndex [4]: 1
Count of target [6]: 1
Count of currIndex [9]: 1
Count of target [6]: 1
Count of currIndex [9]: 2
Count of target [9]: 2
Count of currIndex [9]: 3
Count of target [9]: 3
Count of currIndex [2]: 1
Count of target [9]: 3
Count of currIndex [1]: 1
Count of target [9]: 3
Count of currIndex [1]: 2
Result: 9

希望这个答案对你有帮助。

 类似资料:
  • 问题内容: 对于这个例子说,我有两个字段的表,和。 该表具有以下数据 我想回来 我想返回的结果是每个区域递增连续值的最长长度。对于。 我将如何在MS Sql 2005上执行此操作? 问题答案: 一种方法是使用遍历每一行的递归CTE。如果该行符合条件(增加同一区域的订单号),则将链长增加一。如果没有,则启动一个新链: SQL Fiddle的实时示例。 另一种方法是使用查询查找“中断”,即以相同区域的

  • 问题内容: 改写: 在我的项目中,我有图像。每个图像有5个标签,范围为[1,10]。我用Elasticsearch上传了这些标签: 我将这些文件加载​​到类型为“ img”的索引“ my_project”中的elasticsearch中: 我上传的其他示例文件: 在我的应用程序中,向量要长得多,但是具有固定数量的唯一元素。我喜欢这些文件中的20M。 现在,我想找到给定向量的相似文档。向量具有更多公

  • 问题内容: 我正在尝试使用正则表达式来匹配字符串中相同字符的一个或多个实例的序列。 范例: 我能给我一些提示吗? 问题答案: 您可以使用和正则表达式: 关键部分在外部捕获组-中。在这里,我们捕获一个字符,然后通过组号引用该字符:。组号为2,因为我们有一个外部捕获组,其号为1,表示0次或多次。 您也可以通过一个捕获组和解决它:

  • 问题内容: 在字符串数组中找到最长的字符串有一种简便的方法吗? 像什么? 问题答案: var longest = arr.sort(function (a, b) { return b.length - a.length; })[0]; 可能更有效,但仅自Javascript 1.8 / ECMAScript5起可用,并且在较旧的浏览器中默认不可用:

  • 问题内容: 我想知道什么是实现此目标的最佳方法。 想不出一种好方法来保存需要保存的信息,例如索引和值的数量,最后是要重复的实际数量 问题答案: 您可以使用2D ArrayList,其声明如下: 然后在过程结束时声明要添加到其中的2个ArrayList: 然后 1)遍历列表,检查元素是否与先前相同。 如果是的话,请进行到最后,否则将发现一个不同的元素,此时在ArrayList中将先前相等元素的数量存

  • 我需要找到字符串中最长的序列,并警告序列必须重复三次或更多次。例如,如果我的字符串是: fdwaw4helloworld vcdv1c3xcv3xcz1sda21f2sd1ahelloworld gafgfa4564534321fadghelloworld 然后我希望返回值“helloworld”。 我知道有几种方法可以做到这一点,但我面临的问题是,实际的字符串太大了,所以我真的在寻找一种能够及时