LeetCode 3461.判断操作后字符串中的数字是否相等 I:简单题简单做的时候到了

【LetMeFly】3461.判断操作后字符串中的数字是否相等 I:简单题简单做的时候到了

力扣题目链接:https://leetcode.cn/problems/check-if-digits-are-equal-in-string-after-operations-i/

给你一个由数字组成的字符串 s 。重复执行以下操作,直到字符串恰好包含 两个数字:

  • 从第一个数字开始,对于 s 中的每一对连续数字,计算这两个数字的和 10。
  • 用计算得到的新数字依次替换 s 的每一个字符,并保持原本的顺序。

如果 s 最后剩下的两个数字 相同 ,返回 true 。否则,返回 false

示例 1:
输入: s = "3902"

输出: true

解释:

  • 一开始,s = "3902"
  • 第一次操作:
    • (s[0] + s[1]) % 10 = (3 + 9) % 10 = 2
    • (s[1] + s[2]) % 10 = (9 + 0) % 10 = 9
    • (s[2] + s[3]) % 10 = (0 + 2) % 10 = 2
    • s 变为 "292"
  • 第二次操作:
    • (s[0] + s[1]) % 10 = (2 + 9) % 10 = 1
    • (s[1] + s[2]) % 10 = (9 + 2) % 10 = 1
    • s 变为 "11"
  • 由于 "11" 中的数字相同,输出为 true

示例 2:
输入: s = "34789"

输出: false

解释:

  • 一开始,s = "34789"
  • 第一次操作后,s = "7157"
  • 第二次操作后,s = "862"
  • 第三次操作后,s = "48"
  • 由于 '4' != '8',输出为 false

提示:

  • 3 <= s.length <= 100
  • s 仅由数字组成。

解题方法:模拟:等II的时候再使用更低时间复杂度的算法吧

当数组长度大于2时,不断取相邻两个元素求和并对10取模,最终返回剩下的两个元素是否相同。

tips1:若真的使用字符来一直模拟,可以提前算出两个'0'和一个`````的ASCII码相等。

tips:也可以使用int8或int数组来存储,不用真的一直字符串操作。

  • 时间复杂度 O ( l e n ( s ) 2 ) O(len(s)^2) O(len(s)2)
  • 空间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2025-10-23 23:24:34
 */
/*
>>> ord('0')
48
>>> ord('0') * 2
96
>>> chr(96)   
'`'
>>> ord('`')
96
*/
class Solution {
public:
    bool hasSameDigits(string s) {
        while (s.size() > 2) {
            string newS;
            for (int i = 1; i < s.size(); i++) {
                // cout << '(' << s[i - 1] << '+' << s[i] << " - '`') % 10 + '0' = " << char((s[i - 1] + s[i] - '`') % 10 + '0') << endl;
                newS.push_back((s[i - 1] + s[i] - '`') % 10 + '0');
            }
            s = move(newS);
            // cout << s << endl;
        }
        return s[0] == s[1];
    }
};
Python
python 复制代码
'''
LastEditTime: 2025-10-23 23:28:23
'''
class Solution:
    def hasSameDigits(self, s: str) -> bool:
        a = list(map(lambda c: ord(c) - ord('0'), s))
        while len(a) > 2:
            b = [0] * (len(a) - 1)
            for i in range(len(a) - 1):
                b[i] = (a[i] + a[i + 1]) % 10
            a = b
        return a[0] == a[1]
Java
java 复制代码
/*
 * @LastEditTime: 2025-10-23 23:42:40
 */
class Solution {
    public boolean hasSameDigits(String s) {
        int[] a = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            a[i] = (s.charAt(i) - '0');
        }
        while (a.length > 2) {
            int[] b = new int[a.length - 1];
            for (int i = 0; i < b.length; i++) {
                b[i] = (a[i] + a[i + 1]) % 10;
            }
            a = b;
        }
        return a[0] == a[1];
    }
}
Go
go 复制代码
/*
 * @LastEditTime: 2025-10-23 23:32:07
 */
package main

func hasSameDigits(s string) bool {
    a := make([]byte, len(s))
    for i := range s {
        a[i] = s[i] - '0'
    }
    for len(a) > 2 {
        b := make([]byte,len(a) - 1)
        for i := range b {
            b[i] = (a[i] + a[i + 1]) % 10
        }
        a = b
    }
    return a[0] == a[1]
}
Rust
rust 复制代码
/*
 * @LastEditTime: 2025-10-23 23:46:40
 */
impl Solution {
    pub fn has_same_digits(s: String) -> bool {
        let mut a: Vec<u8> = s.chars()
            .map(|c| c.to_digit(10).unwrap() as u8)
            .collect();
        while a.len() > 2 {
            let mut b = Vec::with_capacity(a.len() - 1);
            for i in 0..a.len() - 1 {
                b.push((a[i] + a[i + 1]) % 10);
            }
            a = b;
        }
        a[0] == a[1]
    }
}

End

今天发现CSDN给我发私信说准备把我一些文章变为VIP可见,实在受之有愧,故拒绝之。

可能是因为快1024了官方想要再整一些活动吧。

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
im_AMBER7 小时前
Leetcode 102 反转链表
数据结构·c++·学习·算法·leetcode·链表
朔北之忘 Clancy7 小时前
2025 年 9 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·数学·青少年编程·题解
开开心心就好8 小时前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
AlenTech8 小时前
200. 岛屿数量 - 力扣(LeetCode)
算法·leetcode·职场和发展
散峰而望9 小时前
【算法竞赛】栈和 stack
开发语言·数据结构·c++·算法·leetcode·github·推荐算法
老鼠只爱大米10 小时前
LeetCode算法题详解 438:找到字符串中所有字母异位词
算法·leetcode·双指针·字符串匹配·字母异位词·滑动窗口算法
AlenTech10 小时前
198. 打家劫舍 - 力扣(LeetCode)
算法·leetcode·职场和发展
重生之后端学习10 小时前
21. 合并两个有序链表
java·算法·leetcode·链表·职场和发展
源代码•宸10 小时前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
朔北之忘 Clancy11 小时前
2020 年 6 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·尺取法