2022-07-11:给定n位长的数字字符串和正数k,求该子符串能被k整除的子串个数。 (n<=1000,k<=100)。 来自微众。4.11笔试。
2022-07-11:给定n位长的数字字符串和正数k,求该子符串能被k整除的子串个数。
(n<=1000,k<=100)。
来自微众。4.11笔试。
答案2022-07-11:
动态规划。假设abcdef%k=0,abc000%k=0,那么def%k=0。
代码用rust编写。代码如下:
use rand::Rng;
fn main() {
let nn: i64 = 18;
let kk: i64 = 20;
let test_time: i32 = 3000;
println!("测试开始");
for i in 0..test_time {
let str = random_number(rand::thread_rng().gen_range(0, nn) + 1);
let k = rand::thread_rng().gen_range(0, kk) + 1;
let ans1 = mod_ways1(&str, k);
let ans2 = mod_ways2(&str, k);
if ans1 != ans2 {
println!("出错了!{}", i);
println!("ans1 = {}", ans1);
println!("ans2 = {}", ans2);
break;
}
}
println!("测试结束");
}
// 暴力方法
// 为了验证
fn mod_ways1(s: &str, k: i64) -> i64 {
let n = s.len() as i64;
let mut ans = 0;
for i in 0..n {
for j in i..n {
if (&s[i as usize..(j + 1) as usize]).parse::<i64>().unwrap() % k == 0 {
ans += 1;
}
}
}
return ans;
}
// 正式方法
// 时间复杂度O(N * k)
fn mod_ways2(s: &str, k: i64) -> i64 {
let mut cur: Vec<i64> = vec![];
for _ in 0..k {
cur.push(0);
}
// 帮忙迁移
let mut next: Vec<i64> = vec![];
for _ in 0..k {
next.push(0);
}
// 0...i 整体余几?
let mut mod0: i64 = 0;
// 答案:统计有多少子串的值%k == 0
let mut ans = 0;
for cha in s.bytes() {
for i in 0..k {
// i -> 10个
// (i * 10) % k
next[((i * 10) % k) as usize] += cur[i as usize];
cur[i as usize] = 0;
}
let mut tmp = cur.clone();
cur = next.clone();
next = tmp.clone();
mod0 = (mod0 * 10 + (cha - '0' as u8) as i64) % k;
ans += if mod0 == 0 { 1 } else { 0 } + cur[mod0 as usize];
cur[mod0 as usize] += 1;
}
return ans;
}
// 为了测试
fn random_number(n: i64) -> String {
let mut ans: Vec<u8> = vec![];
for _i in 0..n {
ans.push('0' as u8 + rand::thread_rng().gen_range(0, 10));
}
return String::from_utf8(ans).unwrap();
}
执行结果如下:

左神java代码
2022-07-11:给定n位长的数字字符串和正数k,求该子符串能被k整除的子串个数。 (n<=1000,k<=100)。 来自微众。4.11笔试。的更多相关文章
- lumen 5.6 设置APP_KEY为32位长的随机字符串
在 App\Console\Commands下 添加以下内容的KeyGenerateCommand.php文件 <?php namespace App\Console\Commands; use ...
- sql中保留一位小数的百分比字符串拼接,替换函数,换行符使用
select num ,cast(round(convert(float,isnull((a.Sum_Num-d.Sum_Num),0))/convert(float,c.Sum_Store_Num ...
- HJ92 在字符串中找出连续最长的数字串
描述 输入一个字符串,返回其最长的数字子串,以及其长度.若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置) 本题含有多组样例输入. 输入描述: 输入一个字符串. 输出描述: 输出字符串中 ...
- 介绍C++11标准的变长参数模板
目前大部分主流编译器的最新版本均支持了C++11标准(官方名为ISO/IEC14882:2011)大部分的语法特性,其中比较难理解的新语法特性可能要属变长参数模板(variadic template) ...
- 11-C语言指针&一维数组&字符串
一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...
- 机器学习入门-数值特征-数据四分位特征 1.quantile(用于求给定分数位的数值) 2.plt.axvline(用于画出竖线) 3.pd.pcut(对特征进行分位数切分,生成新的特征)
函数说明: 1. .quantile(cut_list) 对DataFrame类型直接使用,用于求出给定列表中分数的数值,这里用来求出4分位出的数值 2. plt.axvline() # 用于画 ...
- 剑指offer——面试题11:旋转数组的最小数字
#include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...
- 用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)
做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel ...
- Java随机生成定长纯数字或数字字母混合数
(转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码
- 最长回文字符串(manacher算法)
偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ...
随机推荐
- 【Python】pcap抓MySQL网络包
pcap # -*- coding:utf-8 -*- # yum install libpcap-devel python-devel # pip install pypcap hexdump -i ...
- flask动态csv接口——编码问题
@xxx_blueprint.route("/file", methods=["GET"]) def group_trend(): def generate() ...
- ASM1117脚位图
- 看看CabloyJS是如何异步加载并执行go wasm模块的
介绍 CabloyJS提供了一个内置模块a-wasmgo,将go wasm模块的异步加载运行机制进行了封装,使我们可以非常方便的在CabloyJS项目中引入go wasm,从而支持更多的业务场景开发 ...
- 远程云服务器上docker安装redis的过程
首先明确一点,云服务环境你已经安装好了docker 1.进入docker hub官网查看你所需要的redis的版本信息 https://registry.hub.docker.com/
- [极客大挑战 2019]PHP 1
进入后提示我们网页有备份文件,这边使用爆破工具,网页会down掉 随便随便猜了一下www.zip,成功下载源码 常见的网页备份有 .git ~ .swp .swo .bak .zip 还不知道是什么题 ...
- Apk_动态调试方案
环境准备 安装夜神安卓模拟器 配置好adb[Android 调试桥]环境(这里需要使用官方的adb环境,设置好环境变量)Android 调试桥 (adb) | Android 开发者 | Androi ...
- 一文带你吃透Redis
目录 1. 基本数据结构 2. 数据持久化 3. 高可用 4. 缓存 文章字数大约1.9万字,阅读大概需要66分钟,建议收藏后慢慢阅读!!! 1. 基本数据结构 什么是Redis Redis是一个数据 ...
- 5分钟带你彻底搞懂async底层实现原理!
ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖.研究 async 的原理,就必须先弄清楚 Genera ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(四)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 测试代码 3. 使用 32 bit 编译器时的输出 4. 使用 64 bit 编译器时的输出 5. 输 ...