You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过递归查找两个整数的最后一个公共数字的反向索引

搞定两个整数公共数字的最高反向索引问题

嘿,我明白你要做的事了——从右往左数(反向索引),找到两个整数里最靠左(也就是反向索引最大)的那个公共数字的位置,就像你给的例子:a=2224,b=4222,结果是2对吧?正好我可以给你捋清楚怎么实现。

思路拆解

要找最高反向索引,其实核心是先找到两个数最左侧的公共数字,再把它转换成反向索引就行。步骤大概是这样:

  • 把数字转成字符串,方便我们从左到右遍历(毕竟最左边的数字对应最大的反向索引)
  • 对齐两个数的长度,短的那个前面补0,比如一个是3位一个是4位,补0后长度一致,这样每一位都能对应上
  • 从左到右扫每一位,碰到第一个相同的数字,就计算它的反向索引:总长度 - 1 - 当前正向索引(因为反向索引从右数,个位是0)
  • 如果压根没公共数字,就返回-1或者抛异常,看你需求来

代码实现(和你的现有方法风格一致)

这里直接给你写好方法,和你已经有的getLowestIndexWithSameDigit逻辑呼应:

private static int getHighestIndexWithSameDigit(int a, int b) {
    // 先处理负数,和你原来的方法保持一致
    if (a < 0 || b < 0) {
        throw new IllegalArgumentException("Ambos os argumentos devem ser positivos");
    }

    // 转成字符串方便处理每一位
    String strA = String.valueOf(a);
    String strB = String.valueOf(b);

    // 对齐长度,短的前面补0
    int maxLength = Math.max(strA.length(), strB.length());
    strA = String.format("%" + maxLength + "s", strA).replace(' ', '0');
    strB = String.format("%" + maxLength + "s", strB).replace(' ', '0');

    // 从左到右找第一个相同的数字
    for (int i = 0; i < maxLength; i++) {
        if (strA.charAt(i) == strB.charAt(i)) {
            // 计算反向索引:总长度-1减去正向索引,因为反向从个位开始数0
            return maxLength - 1 - i;
        }
    }

    // 没找到公共数字的情况,返回-1
    return -1;
}

测试你的示例

拿你给的a=2224,b=4222来试:

  • 转成字符串后是"2224"和"4222",长度都是4
  • 从左到右扫,i=1的时候,两个字符都是'2'
  • 反向索引就是4-1-1=2,正好和你的示例结果一致!

和你现有方法的区别

你现有的getLowestIndexWithSameDigit是找最右边的公共数字(反向索引最小),这个方法是找最左边的(反向索引最大),逻辑上刚好反过来:一个从右往左找,一个对齐后从左往右找。

额外小提示

如果两个数字长度不一样,比如a=224,b=4222,补0后a变成"0224",和b的"4222"对齐,第一个相同的是i=1的'2',反向索引是3,对应a的百位和b的百位,完全正确。

内容的提问来源于stack exchange,提问作者Fred Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:42:29