2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来自百度。

news2024/9/23 15:23:29

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 main

import (
    "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
    fmt.Println(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 {
            builder.push(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;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/818138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringBoot】| SpringBoot 和 web组件

目录 一&#xff1a;SpringBoot 和 web组件 1. SpringBoot中使用拦截器&#xff08;重点&#xff09; 2. SpringBoot中使用Servlet 3. SpringBoot中使用过滤器&#xff08;重点&#xff09; 4. 字符集过滤器的应用 一&#xff1a;SpringBoot 和 web组件 1. SpringBoot中使…

yellowbrick:一款特征工程可视化神器!

在建立模型之前一个非常重要的工作就是做特征工程&#xff0c;而在特征工程的过程中&#xff0c;探索性数据分析又是必不可少的一部分。 本次介绍一款功能十分强大的特征工程可视化工具&#xff1a;yellowbrick&#xff0c;包括雷达、一维排序、PCA、特征重要性、递归消除、正…

vue2实现一个树型控件(支持展开树与checkbox勾选)

目录 vue2实现一个树型控件(支持展开树与checkbox勾选)TreeItem.vueTree.vue效果 vue2实现一个树型控件(支持展开树与checkbox勾选) TreeItem.vue <template><div class"tree-item"><span click"toggleExpanded" class"icon" v…

用户需求转化为产品需求的5大注意事项

用户需求不等于产品需求&#xff0c;如果将用户需求和产品需求混为一谈&#xff0c;往往容易产生需求不完整、需求错误以及后期需求变更频繁等问题&#xff0c;那么用户需求转化为产品需求有什么注意事项&#xff1f; 1、了解需求转化落地逻辑流程 需要注意&#xff0c;用户需求…

DT水下照明学习

ocean1.timetime*.5; 水草动画 整体样子 叶子数量相关设置 植物运动相关 晃动不明显 增加这里的值 螺旋 弯曲播放&#xff0c;植物不会变直 表达式 kelp1.spiralMinsin(frame*.1)/5; 水泡 particleShape1.spriteScaleXPP particleShape1.spriteScaleYPP rand(0.1,0.5); part…

Nginx 【实战篇】 ---- Nginx 实战(购买服务器、域名、申请证书)

Nginx 【实战篇】 ---- Nginx 实战 1. 购买域名2. 购买服务器3. 服务器的基础配置和ssh连接4. 配置 LNMP 环境和防火墙配置4.1 配置 LNMP 环境4.2 修改防火墙配置 5. 将域名解析到服务器上6. 在线申请证书7. 将刚申请的证书配置到Nginx上 1. 购买域名 2. 购买服务器 域名和服务…

spring boot项目整合spring security权限认证

一、准备一个spring boot项目 1、引入基础依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.sp…

RuoYi-Vue代码常见漏洞修复

Redis未设置密码 解决方法&#xff1a; 此方法永久生效* 找到requirepass关键字&#xff0c;后面就是跟的密码&#xff0c;默认情况下是注释掉的&#xff0c;即默认不需要密码&#xff0c;如下&#xff1a;  打开注释&#xff0c;设置为自己的密码&#xff0c;重启即可 数据…

Scrum敏捷开发管理流程+scrum工具免费

Leangoo领歌它覆盖了敏捷项目研发全流程&#xff0c;包括小型团队Scrum敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums大规模敏捷。它提供了灵活的敏捷模板和极致的协作体验&#xff0c;可以让团队快速上手&#xff0c;快速落地Scrum敏捷开发管理。 首先建立产…

06 HTTP(下)

06 HTTP&#xff08;下&#xff09; 介绍服务器如何响应请求报文&#xff0c;并将该报文发送给浏览器端。介绍一些基础API&#xff0c;然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分&#xff0c;介绍stat、mmap、iovec、writev。 流程图部分&#xff0c;描…

ssm员工管理系统

ssm员工管理系统 java员工管理系统 员工管理系统 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&#xff09; 硬件环境&#xff1a;Windows 功能介绍&#xff1a; 1.用户…

html学习3(表格table、列表list)

1、html表格由<table>标签来定义。 <thead>用来定义表格的标题部分&#xff0c;其内部用 <th > 元素定义列的标题&#xff0c;可以使其在表格中以粗体显示&#xff0c;与普通单元格区分开来。<tbody>用来定义表格的主体部分&#xff0c;其内部用<t…

Java版知识付费免费搭建+spring cloud 前后端分离实现知识付费平台

提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发…

CompletableFuture 详解

目录 简单介绍 常见操作 创建 CompletableFuture new 关键字 静态工厂方法 处理异步结算的结果 简单介绍 CompletableFuture 同时实现了 Future 和 CompletionStage 接口。 public class CompletableFuture<T> implements Future<T>, CompletionStage<T…

小白到运维工程师自学之路 第六十集 (docker的概述与安装)

一、概述 1、客户&#xff08;老板&#xff09;-产品-开发-测试-运维项目周期不断延后&#xff0c;项目质量差。 随着云计算和DevOps生态圈的蓬勃发展&#xff0c;产生了大量优秀的系统和软件。软件开发人员可以自由选择各种软件应用环境。但同时带来的问题就是需要维护一个非…

HTTP——HTTP报文内的HTTP信息

HTTP 通信过程包括从客户端发往服务器端的请求及从服务器端返回客户端的响应。本章就让我们来了解一下请求和响应是怎样运作的。 HTTP 一、HTTP报文二、请求报文及响应报文的结构三、编码提升传输速率1、报文主体和实体主题的差异2、压缩传输的内容编码3、分割发送的分块传输编…

【数据分享】1999—2021年地级市地区生产总值及一二三产构成数据(Shp/Excel格式)

在之前的文章中&#xff0c;我们分享过基于2000-2022年《中国城市统计年鉴》整理的1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状…

ABeam China Global | 探索赞比亚:非洲市场商机、产业发展与劳动挑战(下)

前情回顾 ABeam China Global | 探索赞比亚&#xff1a;非洲市场商机、产业发展与劳动挑战&#xff08;上&#xff09; 在「探索赞比亚」系列的上期&#xff0c;我们介绍了森大集团、非洲市场概述&#xff0c;以及“SADC”这一地区经济组织。本期我们将视角聚焦到赞比亚&…

Android Studio多渠道打包

使用环境&#xff1a; Android studio 多渠道打包 使用方法&#xff1a; 1 APP下build.gradle文件 flavorDimensions "default"productFlavors {huawei {dimension "default"manifestPlaceholders [ channel:"huawei" ]}xiaomi {dimension &…

LLM微调 | Adapter: Parameter-Efficient Transfer Learning for NLP

目的&#xff1a;大模型预训练微调范式&#xff0c;微调成本高。adapter只只微调新增的小部分参数【但adapter增加了模型层数&#xff0c;引入了额外的推理延迟。】 Adapters最初来源于CV领域的《Learning multiple visual domains with residual adapters》一文&#xff0c;其…