面试题目:(4)给表达式添加运算符

news2024/9/19 9:35:41

目录

题目

代码

思路解析

例子


题目

  • 题目
    • 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,
  • 返回
    • 所有能够得到 target 的表达式。
    • 1 <= num.length <= 10
    • num 仅含数字
    • -231 <= target <= 231 - 1
  • 注意
    • 返回表达式中的操作数 不应该 包含前导零。
  • 示例 1:
    • 输入: num = "123", target = 6
    • 输出: ["1+2+3", "1*2*3"]
    • 解释: “1*2*3” 和 “1+2+3” 的值都是6。
  • 示例 2:
    • 输入: num = "232", target = 8
    • 输出: ["2*3+2", "2+3*2"]
    • 解释: “2*3+2” 和 “2+3*2” 的值都是8。
  • 示例 3:
    • 输入: num = "3456237490", target = 9191
    • 输出: []
    • 解释: 表达式 “3456237490” 无法得到 9191 。

代码

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void evaluate(int* num_list, int* num_flag, int n, int target) {
    int end = num_list[0]; 
    for (int i = 1; i < n; i++) {
        if (num_flag[i] == 1) {
            end *= num_list[i];
        } else if (num_flag[i] == 2) {
            end += num_list[i];
        } else if (num_flag[i] == 3) {
            end -= num_list[i];
        }
    }
    if (end == target) {
        printf("找到表达式: ");
        for (int i = 0; i < n; i++) {
            if (i > 0) {
                if (num_flag[i] == 1) printf("*");
                if (num_flag[i] == 2) printf("+");
                if (num_flag[i] == 3) printf("-");
            }
            printf("%d", num_list[i]);
        }
        printf(" = %d\n", target);
    }
}

void backtrack(int* num_list, int* num_flag, int n, int target, int pos) {
    if (pos == n) {
        evaluate(num_list, num_flag, n, target);
        return;
    }
    for (int i = 1; i <= 3; i++) { // 遍历三种运算符
        num_flag[pos] = i;
        backtrack(num_list, num_flag, n, target, pos + 1);// 递归下一个运算符
    }
}

int main() {
    char num[256] = "";
    int target;

    printf("num = ");
    fgets(num, sizeof(num), stdin);
    if (strlen(num) > 10) return 0;

    int n = strlen(num) - 1;
    int num_list[n];
    for (int i = 0; i < n; i++) {
        if (num[i] >= '0' && num[i] <= '9') {
            num_list[i] = num[i] - '0';
        } else {
            return 0;
        }
    }

    printf("target = ");
    scanf("%d", &target);
    if (target > 230 || target < -231) return 0;

    int num_flag[n]; // 保存操作符的数组

    backtrack(num_list, num_flag, n, target, 1);

    return 0;
}

思路解析

  • 接收输入的字符串和目标数字
  • 判断其是否输入正确
  • 将字符串数字转为整数数组
  • 调用递归backtrack函数,从第一位开始递归
    • 判断递归索引是否是到最后一位
      • 是的话调用验算函数
        • 递归标志位数组进行判断加减算出答案
        • 判断答案于目标数字是否一样,一样就打印
    • 不是的话就继续就进行对标志位数组进行初始化
      • 一个数字一个标志位,如果是1就表示乘法,2为加法,3为减法
      • 递归索引+1进行递归

简单来说就是先从第一个字符开始变化标志位,从1到2到3,也就从乘法加法减法,但在第一个执行乘法前,后面的要先完成从1到2到3的变化,所以就是在第一个执行1的时候要等第二个数字从1到2到3变化完才进行变2,然后又要等第二个数字从1到2到3才变3,如果有第三个数字的话第二个数字也要等第三个数字变化完,一层一层递归,直到递归到最后一个数字后,才开始进行计算

例子

输入 1234   目标 10

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

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

相关文章

【JVM】深入理解类加载机制(一)

深入理解类加载机制 Klass模型 Java的每个类&#xff0c;在JVM中都有一个对应的Klass类实例与之对应&#xff0c;存储类的元信息如:常量池、属性信息、方法信息…从继承关系上也能看出来&#xff0c;类的元信息是存储在元空间的。普通的Java类在JVM中对应的是InstanceKlass(C)…

便利店(超市)管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

层次聚类算法原理及Python实现

层次聚类算法&#xff08;Hierarchical Clustering Method&#xff09;是一种基于簇间相似度在不同层次上分析数据&#xff0c;从而形成树形聚类结构的算法。它主要分为两种形式&#xff1a;凝聚层次聚类&#xff08;自下而上&#xff09;和分裂层次聚类&#xff08;自上而下&a…

ansible --------拓展

编辑 hosts 配置文件 [rootmo ~]# vim /etc/ansible/hosts # 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook # 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml # 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/nginx.yml roles 修…

C# asnyc和await

asnyc和await是什么? 异步编程是一种编程范式&#xff0c;C#中的异步编程可以通过Thread,TheadPool,Task,async/await等来实现。 await能等待什么? 不能等待同步代码&#xff0c;只能等待Task或异步方法&#xff0c;且异步方法必须有返回值&#xff0c; async/await的出现…

遇到BUG怎么分析,全方位带你分析

软件测试的目的是尽可能早地找出软件产品中潜藏的缺陷&#xff0c;并确保其得以修复。所以缺陷的分析就会变得很关键&#xff0c;那么如何来分析缺陷呢&#xff1f; 根据缺陷的定义描述准则&#xff1a; 所有不满足需求或超出需求的都是缺陷。缺陷的判定主要的依赖点在于产品…

配置oss cdn加速静态资源访问 阿里云

效果对比 配置cdn下载速度对比 步骤 1: 登录阿里云控制台控制台主页&#xff0c;找到并点击“对象存储 OSS” 创建存储空间&#xff08;Bucket&#xff09; 设置权限 步骤 2: 获取外网访问地址 步骤 3 在 CDN 中使用该地址 复制该外网访问地址 打开全站加速 DCDN/域名管理 添…

【LeetCode热题100】双指针

class Solution { public:void moveZeroes(vector<int>& nums) {int dst -1,cur 0;while(cur<nums.size()){if(nums[cur] 0){cur;}else{swap(nums[dst1],nums[cur]);cur;dst;}}} }; 题目分析&#xff1a;对于数组分块/数组划分的问题&#xff0c;我们可以使用双…

Jmeter请求发送加密参数详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近在做http加密接口&#xff0c;请求头的uid参数及body的请求json参数都经过加密再发送请求&#xff0c;加密方式为&#xff1a;ase256。所以&#xff0c;jmeter…

社区志愿者服务系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

【AI落地应用实战】Amazon SageMaker JumpStart 体验零一万物的 Yi 1.5 模型

目录 一、前言1.1、Amazon SageMaker JumpStart1.2、Yi-1.5 9B Chat 模型 二、Yi 1.5实践流程2.1、准备SageMaker Studio环境2.2、部署Yi-1.5-9B模型2.3、运行推理Yi-1.5-9B模型 三、体验总结 中国大模型公司零一万物发布开源大模型Yi-1.5&#xff0c;包含多个版本。同时发布多…

YOLOv8轻量化改进之slimneck

目录 一、原理 二、代码 三、修改到YOLOv8中 四、yaml文件修改 一、原理 论文地址:2206.02424 (arxiv.org) 主要模块的网络结构 二、代码 slimneck的代码如下,slimneck主要由GSConv和VoVGSCSPC两部分组成。 class GSConv(nn.Module):# GSConv https://github.com/Alan…

分布式高可用架构设计

一、限流 1、单机限流 如图&#xff0c;应用C的资源c/x被上游的应用A和应用C并发访问&#xff0c;应用C的系统能力支持c/x资源最高5000/qps的访问量&#xff1b;为了不让高并发流量或尖峰流量压垮应用C&#xff0c;可以针对应用C的资源c/x做限流&#xff1b;比如设置限流4500…

为什么会有浮毛猫毛?这些不容忽视的危害宠物空气净化器能解决!

很多人看到朋友家可爱的猫猫狗狗&#xff0c;自己也心痒痒想要养一只。但一想到宠物可能会带来的掉毛、体臭等问题&#xff0c;又犹豫不决。诚然&#xff0c;养宠物确实会对室内空气造成一定影响&#xff0c;但养宠人的共识是&#xff1a;那份与宠物共度的快乐时光&#xff0c;…

mysql索引探索

《令人困惑的mysql索引》在这篇文章中&#xff0c;遗留了几个困惑。为了解决这些困惑&#xff0c;我又进行了一些测试。 本文中索引的建立&#xff0c;并不一定科学&#xff0c;查询的SQL也不一定科学&#xff0c;只是为了理解mysql索引建的一些测试数据。 CREATE TABLE cms_…

加密与安全_双向RSA+AES加密及Code实现

文章目录 AES / RSA流程Code生成AES密钥 和 生成RSA密钥对AES工具类&#xff0c;提供AES加密和解密功能RSA加密工具类测试类 总结 AES / RSA AES&#xff1a;一种对称加密算法&#xff0c;意味着加密和解密使用相同的密钥。速度快&#xff0c;适合加密大量数据。RSA&#xff1…

Tina-Linux Bootloaer简述

Tina-Linux Bootloaer简述 目录介绍 ubuntuubuntu1804:~/tina-v2.0-sdk/lichee/brandy-2.0$ tree -L 1 . ├── build.sh ├── opensbi ├── spl //boot0 ├── spl-pub //boot0 ├── tools └── u-boot-2018 /ubootTina-Linux 启动流程简述

ant design pro v6 如何做好角色管理

先上图&#xff1a; 整个角色管理是如何做的吗&#xff1f; 首先你要处理后端&#xff0c;要先把角色存到用户那。 这是用户管理部分的内容&#xff1a; 可以看到一个用户是有多个角色的。 看到没有&#xff0c;存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…

reactive 和 ref 的区别和联系

在 Vue3 的组合式 API &#xff08;Composition API&#xff09;中&#xff0c;ref 和 reactive 是用于创建响应式数据的两个核心函数。尽管二者都用于实现响应式数据&#xff0c;但在使用方式和适用场景上存在一些区别。 1. 基本概念 1.1 ref 用途&#xff1a;用于定义 基本…

深入探讨视频美颜SDK:直播美颜工具的核心技术与实现

本篇文章&#xff0c;笔者将深入探讨视频美颜SDK的核心技术及其在直播美颜工具中的实现。 一、视频美颜SDK的核心技术 视频美颜SDK通过一系列复杂的算法和技术&#xff0c;实时处理视频流并应用各种美颜效果。这些核心技术主要包括以下几个方面&#xff1a; 1.人脸识别与追踪…