2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <=
2023-07-31 20:32:53 来源:哔哩哔哩
2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。
1 <= x <= 10^5。
(资料图片仅供参考)
来自百度。
答案2023-07-31:
大体步骤如下:
1.初始化一个字符串builder
,用于构建结果字符串。
2.初始化一个字符变量cur
,初始值为'r',用于轮流使用字符'r'、'e'和'd'构建回文串。
3.进入循环,直到输入的整数x变为0。
4.在循环中,使用near
函数找到最接近x且满足条件的数值number。
• near
函数采用二分法搜索,从1开始逐渐增加m的值,直到找到满足条件的m值。
• 满足条件是通过ok
函数判断,即判断n乘以n+1再除以2是否小于等于x。
• 将满足条件的m值赋给ans,并继续搜索更大的m值。
5.对于当前找到的number,使用循环将字符cur添加到字符串builder中,重复number次。
6.计算处理完当前的number后,需要减去的值,即number乘以(number+1)再除以2,记为delta。
7.将delta从x中减去。
8.根据当前的cur字符,顺序更新cur为下一个字符。
• 如果cur是'r',则更新为'e'。
• 如果cur是'e',则更新为'd'。
• 如果cur是'd',则更新为'r'。注意,这是一个循环的过程。
9.返回构建好的字符串builder。
总时间复杂度为O(x * log(x)),总空间复杂度为O(1),其中x是输入的值。
go完整代码如下:
package mainimport ( "fmt")func palindromeX(x int) string { builder := "" cur := 'r' for x > 0 { number := near(x) for i := 0; i < number; i++ { builder += string(cur) } x -= number * (number + 1) / 2 if cur == 'r' { cur = 'e' } else if cur == 'e' { cur = 'd' } else { cur = 'r' } } return builder}func near(x int) int { l := 1 r := x m, ans := 0, 0 for l <= r { m = (l + r) / 2 if ok(m, x) { ans = m l = m + 1 } else { r = m - 1 } } return ans}func ok(n, x int) bool { return int64(n*(n+1)/2) <= int64(x)}func main() { x := 13 (palindromeX(x))}
rust完整代码如下:
fn palindrome_x(x: i32) -> String { let mut builder = String::new(); let mut cur = 'r'; let mut x = x; while x > 0 { let number = near(x); for _ in 0..number { (cur); } x -= number * (number + 1) / 2; cur = match cur { 'r' => 'e', 'e' => 'd', _ => 'r', }; } builder}fn near(x: i32) -> i32 { let mut l = 1; let mut r = x; let mut ans = 0; while l <= r { let m = (l + r) / 2; if ok(m, x) { ans = m; l = m + 1; } else { r = m - 1; } } ans}fn ok(n: i32, x: i32) -> bool { (n * (n + 1) / 2) <= x}fn main() { let x = 13; println!("{}", palindrome_x(x));}
c++完整代码如下:
#include<iostream>#include<string>int near(int x);std::string palindromeX(int x) { std::string result; char cur = 'r'; while (x > 0) { int number = near(x); for (int i = 0; i < number; i++) { result += cur; } x -= number * (number + 1) / 2; cur = (cur == 'r') ? 'e' : (cur == 'e') ? 'd' : 'r'; } return result;}bool ok(int n, int x);int near(int x) { int l = 1; int r = x; int m, ans = 0; while (l <= r) { m = (l + r) / 2; if (ok(m, x)) { ans = m; l = m + 1; } else { r = m - 1; } } return ans;}bool ok(int n, int x) { return ((long long)n * (n + 1) / 2) <= x;}int main() { int x = 13; std::cout << palindromeX(x) << std::endl; return 0;}
关键词:
为你推荐
陕西两万五千吨市政桥梁完成“转身”
兰州40家A级旅游景区暂时关闭 开放时间暂定
北京丰台初步排查确诊病例密接、次密接258人 组织3万余
四川95岁战斗英雄何开仲有个心愿:想见见山东老战友
增产快!电力生产加速 能源供应偏紧将得到缓解
夏粮和早稻实现双增产 前三季度农林牧渔业增加值同比增
云南瑞丽江桥“守门员”:疫情防控不漏一人
“久病床前真孝子” 浙江男子照顾瘫痪母亲十载
黑龙江:儿童福利机构养育儿童保障标准提至1750元
山西新绛南关村民:因洪水离开家的日子
“十年磨一剑” 黑色矸石山终闻花果香
国家一级保护动物猎隼受伤 内蒙古警方送医救治
一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏通告
涉案金额逾3000万 广西一“洗钱”团伙受审
青藏高原有雨雪天气 西南地区江南华南等地有明显降雨
湖南长沙县发现1例外省输入新冠肺炎确诊病例
青海互助:打造全国最大高原草莓种苗繁育中心
照片修复师:每修复一张照片越珍惜与亲人相处的时光
贵州率先在中国实现地质矿产勘查全过程数字化
浙江岱山通报一船沉没 2人获救11人失联
推荐内容
- 陕西两万五千吨市政桥梁完成“转身”
- 河北邯郸发生天然气泄漏事故致3人死亡
- 兰州40家A级旅游景区暂时关闭 开放时间暂定
- 湖北警方打掉两跨省“跑分”洗钱犯罪团伙
- 新冠肺炎疫情下如何保护孩子?张文宏建议设儿童专
- 海南儋州出现1例治愈后的境外输入病例复阳人员
- 男童脊柱侧弯压迫心肺 医生耗时7小时矫正
- 宁夏将开展18岁以上重点人群加强免疫接种工作
- 北京新增1例京外关联本地确诊病例 病例所在街道
- 北京丰台初步排查确诊病例密接、次密接258人 组
- 四川95岁战斗英雄何开仲有个心愿:想见见山东老战
- 增产快!电力生产加速 能源供应偏紧将得到缓解
- 夏粮和早稻实现双增产 前三季度农林牧渔业增加值
- 云南瑞丽江桥“守门员”:疫情防控不漏一人
- 宁夏吴忠核酸阳性者已确诊
- 宁夏吴忠市发现一例外省来吴核酸检测阳性人员
- “久病床前真孝子” 浙江男子照顾瘫痪母亲十载
- 内蒙古额济纳旗5名确诊病例行动轨迹:在同一饭店
- 北京疾控:近期去过这些地方的相关人员请主动报备
- 北京新增1例京外关联输入本地确诊病例
- 增强为民服务能力——做群众最盼事 解群众最难题
- 魏复盛:干一些平凡的实事
- 中缅边境畹町海关查获涉嫌走私海马干4381尾
- 黑龙江:儿童福利机构养育儿童保障标准提至1750元
- 山西新绛南关村民:因洪水离开家的日子
- “十年磨一剑” 黑色矸石山终闻花果香
- 适老化的游戏准备好了吗?电子游戏别忽视老年人
- 国家一级保护动物猎隼受伤 内蒙古警方送医救治
- 西安鄠邑发布2名密接者活动轨迹
- 宁夏吴忠发现一例外省来吴核酸检测阳性人员
- 上海籍阳性夫妻内蒙古行程涉及3个景区、1个民宿、
- 内蒙古额济纳旗启动IV级应急响应 排查出密接者197人
- 内蒙古二连浩特市两地调整为中风险地区
- 泥若二审宣判来了 知名游戏主播山泥若被判刑3年
- 河北邯郸发生天然气泄漏 3人窒息死亡
- 北京丰台报告1例甘肃来京人员新冠病毒核酸检测阳性
- 内蒙古二连浩特两个社区调整为中风险地区
- 一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏
- 兰州6人核酸检测呈阳性 主城区局地调整为中风险区
- 涉案金额逾3000万 广西一“洗钱”团伙受审
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10