UVa 11234 - Expressions

本文介绍了一种使用递归方法实现二叉树的前缀遍历,并通过二维数组来存储每一层节点的方法。通过对输入序列进行反转,模拟了二叉树的前缀遍历过程,最终实现了从底层到顶层的顺序输出。
虽然在List分类里,但实质是一个二叉树的题,抱着不用链表只用递归的目标,RE了三次,究其原因数组开小了,最后改到a[5000][8000]终于AC了,但却跑了个2.6秒,
差点没过,后来估计了一下数据范围,优化了一下,改成a[5000][1500]后,跑了个0.5几秒,总算是差不多了。
题目中stack实质上是个二叉树的前缀遍历(本身的序列是前缀遍历的逆序,操作时需要将其反过来),而queue的排列方法实质上是一种从最底层开始一层一层(每层从左到右)往上遍历的顺序序列。这样,就可以利用递归模拟前序遍历的过程,然后用二维数组将每层的元素都存起来,最后将其按从下层
到上层的的顺序将每层元素全部输出出来就可以了。

代码如下:

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>

using namespace std;

char a[5000][1500], c[10002];
int num, cmin;
void exp(int cov)
{
    char s[3];
    s[0] = c[num];
    s[1] = '\0';
    strcat(a[cov], s);
    if(c[num] >= 'a' && c[num] <= 'z')
    {
        if(cov > cmin)
            cmin =cov;
        num++;
        return ;
    }
    num++;
    exp(cov + 1);
    exp(cov + 1);
}
int main()
{
#ifdef test
    freopen("in.txt", "r", stdin);
#endif
    int t, i;
    char b[10002];
    scanf("%d", &t);
    getchar();
    while(t--)
    {
        memset(a, 0, sizeof(a));
        gets(b);
        int len = strlen(b);
        for(i = len - 1; i >= 0; i--)
            c[len - i- 1] = b[i];  //将其反向,转化为前缀遍历序列
        c[len] = '\0';
        cmin = num = 0;
        exp(0);
        for(i = cmin; i >= 0; i--)
            printf("%s",a[i]);
        puts("");
    }
    return 0;
}



<think>好的,我现在需要帮助用户解决关于ESLint的no-unused-expressions规则的配置问题。用户提到可能涉及ESLint规则或其他代码检查工具的配置需求,所以首先要确认这个规则的具体情况。 首先,我回忆一下no-unused-expressions规则的作用。这个规则主要是用来检查代码中是否有未使用的表达式,也就是那些没有对程序状态产生任何影响的表达式。比如,用户可能写了类似`a + b;`这样的语句,虽然计算了a和b的和,但没有赋值给变量或用于其他操作,这样的表达式就是未使用的,可能会被此规则检测到并报错。 接下来,我需要考虑用户可能遇到的常见场景。例如,使用Chai.js这样的测试库时,可能会写出`expect(...).to.be.true;`这样的断言语句。这些语句在ESLint默认配置下可能被标记为未使用的表达式,导致错误。因此,用户可能需要调整规则配置来允许这种情况。 根据引用内容,用户之前提到过使用eslint-config-prettier来禁用与格式相关的规则,但这里的问题是关于未使用表达式的,属于逻辑层面的规则,所以需要直接配置ESLint的规则而不是通过Prettier处理。 用户可能已经在使用create-react-app,而引用中提到的方案三使用了react-app-rewired和customize-cra来覆盖配置。这时候,用户可能需要通过修改ESLint配置文件来调整规则设置,而不需要eject项目。 接下来,我需要整理配置这个规则的具体步骤。通常,在.eslintrc文件中,可以通过rules字段来设置。对于no-unused-expressions,需要允许某些表达式(如测试中的断言),可能需要设置allowTernary或者allowShortCircuit等选项。例如: { "rules": { "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": false }] } } 另外,针对特定库如Chai.js,可能需要使用eslint-plugin-chai来解决,或者在规则中添加allow选项。例如使用插件后配置: { "plugins": ["chai-friendly"], "rules": { "no-unused-expressions": "off", "chai-friendly/no-unused-expressions": "error" } } 同时,用户可能需要知道如何在create-react-app项目中应用这些配置,尤其是如果项目是基于react-scripts的话。根据引用中的方案三,使用react-app-rewired来覆盖配置,可以修改config-overrides.js文件,将自定义的ESLint配置合并进去。 最后,要提醒用户注意版本兼容性,比如引用中提到react-app-rewired适用于4.x以下的版本,如果用户使用的是更高版本可能需要其他方法。此外,测试配置是否生效的方法,比如运行ESLint命令检查,或者查看IDE的错误提示是否消失。</think>### ESLint no-unused-expressions 规则配置解决方案 #### 规则定义与作用 `no-unused-expressions` 是 ESLint 核心规则之一,用于检测代码中未产生实际作用的表达式(例如未赋值或未参与逻辑判断的数学运算)。该规则可避免因冗余代码导致的可读性问题和潜在错误。 #### 典型应用场景 1. 单元测试框架中的断言表达式(如 `expect(...).to.be.true`) 2. JavaScript 短路表达式(如 `a || b`) 3. 三元运算符表达式(如 `condition ? action1() : action2()`) #### 配置方法 通过 `.eslintrc` 配置文件进行设置,支持以下参数: ```json { "rules": { "no-unused-expressions": ["error", { "allowShortCircuit": true, // 允许短路表达式 "allowTernary": true, // 允许三元运算符 "allowTaggedTemplates": false // 是否允许标记模板字符串 }] } } ``` #### 测试框架特殊配置 使用 Chai.js 等断言库时,建议安装专用插件: ```bash npm install eslint-plugin-chai-friendly --save-dev ``` 配置示例: ```json { "plugins": ["chai-friendly"], "rules": { "no-unused-expressions": "off", "chai-friendly/no-unused-expressions": "error" } } ``` #### 在 Create-React-App 中的实现 通过 `react-app-rewired` 覆盖默认配置(适用 react-scripts 4.x 以下版本): 1. 修改 `config-overrides.js`: ```javascript const { override, useEslintRc } = require('customize-cra'); module.exports = override(useEslintRc()); ``` 2. 创建 `.eslintrc` 文件写入自定义规则[^2][^3] #### 验证配置有效性 ```bash npx eslint yourfile.js # 或查看 IDE 的 ESLint 错误提示 ``` #### 注意事项 1. 新版 react-scripts (5.0+) 使用 `ESLINT_NO_DEV_ERRORS=true` 环境变量控制检查强度[^1] 2. 与 Prettier 配合时需确保 `eslint-config-prettier` 正确安装[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值