计算机创新协会冬令营——暴力枚举题目04

说句实话,单纯的暴力枚举题目太难找了┭┮﹏┭┮,接招吧~~

题目

2094. 找出 3 位偶数 - 力扣(LeetCode)

给你一个整数数组 digits ,其中每个元素是一个数字(0 - 9)。数组中可能存在重复元素。

你需要找出 所有 满足下述条件且 互不相同 的整数:

  • 该整数由 digits 中的三个元素按 任意 顺序 依次连接 组成。
  • 该整数不含 前导零
  • 该整数是一个 偶数

例如,给定的 digits 是 [1, 2, 3] ,整数 132 和 312 满足上面列出的全部条件。

将找出的所有互不相同的整数按 递增顺序 排列,并以数组形式返回

示例

示例 1:

输入:digits = [2,1,3,0]
输出:[102,120,130,132,210,230,302,310,312,320]
解释:
所有满足题目条件的整数都在输出数组中列出。 
注意,答案数组中不含有 奇数 或带 前导零 的整数。

示例 2:

输入:digits = [2,2,8,8,2]
输出:[222,228,282,288,822,828,882]
解释:
同样的数字(0 - 9)在构造整数时可以重复多次,重复次数最多与其在
digits
 中出现的次数一样。 
在这个例子中,数字 8 在构造 288、828 和 882 时都重复了两次。 

示例 3:

输入:digits = [3,7,5]
输出:[]
解释:
使用给定的 digits 无法构造偶数。

提示:

  • 3 <= digits.length <= 100
  • 0 <= digits[i] <= 9

Java解法:暴力遍历

这需要挨个找到全部的数,然后注意去重即可。

class Solution {
    public int[] findEvenNumbers(int[] digits) {
        int len = digits.length;
        // 这里使用集合的原因主要是java中数组的长度是事先固定的,但是我们又不知道长度,所以采用集合
        Set<Integer> set = new HashSet<>();
        // 三层for循环解决问题
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                for (int k = 0; k < len; k++) {
                    // 重复位置跳过
                    if (i == j || j == k || i == k) {
                        continue;
                    }
                    // 判断是否满足条件
                    int num = digits[i] * 100 + digits[j] * 10 + digits[k];
                    if (num >= 100 && num % 2 == 0) {
                        // 满足条件加入集合
                        set.add(num);
                    }
                }
            }
        }
        // 集合转化为 int数组
        int[] res = set.stream().mapToInt(Integer::intValue).toArray();
        // 从小到大排序
        Arrays.sort(res);
        return res;
    }
}

 


C解法

这段C的解法由于我对C不太了解哈,找其他学长写的,大家看不懂的话可以理解思路即可。

或者在力扣找使用C的同学看一看他们通过的代码♪


// 定义比较函数用于排序
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

// 判断是否为偶数
int isEven(int num) {
    return num % 2 == 0;
}

int* findEvenNumbers(int* digits, int digitsSize, int* returnSize) {
    // 生成所有可能的三位数
    int count = 0;
    int maxResultSize = digitsSize * digitsSize * digitsSize;
    int* result = (int*)malloc(sizeof(int) * maxResultSize);
    int* isVisited = (int*)calloc(1000, sizeof(int));

    for (int i = 0; i < digitsSize; i++) {
        for (int j = 0; j < digitsSize; j++) {
            for (int k = 0; k < digitsSize; k++) {
                // 判断索引是否相同
                if (i != j && i != k && j != k) {
                    // 将三个数字按顺序连接成三位数
                    int number = digits[i] * 100 + digits[j] * 10 + digits[k];

                    // 检查是否满足条件且未访问过
                    if (isEven(number) && number >= 100 && number <= 999 && !isVisited[number]) {
                        result[count++] = number;
                        isVisited[number] = 1;
                    }
                }
            }
        }
    }

    // 如果没有找到符合条件的数字,则返回空数组
    if (count == 0) {
        free(result);
        free(isVisited);
        *returnSize = 0;
        return NULL;
    }

    // 排序结果数组
    qsort(result, count, sizeof(int), compare);

    // 动态分配内存以保存结果
    int* finalResult = (int*)malloc(sizeof(int) * count);
    for (int i = 0; i < count; i++) {
        finalResult[i] = result[i];
    }

    // 释放内存
    free(result);
    free(isVisited);

    // 更新返回结果的大小
    *returnSize = count;

    return finalResult;
}

 


C++解法

class Solution {
public:
    vector<int> findEvenNumbers(vector<int>& digits) {
        int len = digits.size();
        std::set<int> s;

        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                for (int k = 0; k < len; k++) {
                    // 重复位置跳过
                    if (i == j || j == k || i == k) {
                        continue;
                    }

                    // 判断是否满足条件
                    int num = digits[i] * 100 + digits[j] * 10 + digits[k];
                    if (num >= 100 && num % 2 == 0) {
                        // 满足条件加入集合
                        s.insert(num);
                    }
                }
            }
        }

        // 集合转化为 vector
        std::vector<int> res(s.begin(), s.end());

        // 从小到大排序
        std::sort(res.begin(), res.end());

        return res;
    }
};

 


Python3

class Solution:
    def findEvenNumbers(self, digits: List[int]) -> List[int]:
        length = len(digits)
        result_set = set()

        # 三层for循环解决问题
        for i in range(length):
            for j in range(length):
                for k in range(length):
                    # 重复位置跳过
                    if i == j or j == k or i == k:
                        continue

                    # 判断是否满足条件
                    num = digits[i] * 100 + digits[j] * 10 + digits[k]
                    if 100 <= num <= 999 and num % 2 == 0:
                        # 满足条件加入集合
                        result_set.add(num)

        # 集合转化为列表,并排序
        result_list = sorted(list(result_set))
        return result_list


总结

这C的代码属实是给我折磨到了,本来打算自己写的,但是无奈C的知识真的忘得差不多了,大家刚刚学完C应该是比我掌握的更好,应该可以理解,如果实在理解不了理解思路吧。

现在知道什么是这个世界上最好的语言了吧 : (

反正遍历的思路就是这样,注意边界条件,注意范围,注意目标。

加油ヾ(◍°∇°◍)ノ゙

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏效果图是用什么软件建模设计的?

光伏效果图是展示光伏系统在建筑或地面上的外观和效果的图像。要创建这样的效果图&#xff0c;需要使用专业的建模和设计软件。那么&#xff0c;光伏效果图是用什么软件建模设计的呢&#xff1f; 鹧鸪云光伏设计软件&#xff1a;鹧鸪云是一款集开发、设计和施工为一体的设计软…

【每日一题】被列覆盖的最多行数

文章目录 Tag题目来源解题思路方法一&#xff1a;二进制枚举 写在最后 Tag 【二进制枚举】【矩阵】【2024-01-04】 题目来源 2397. 被列覆盖的最多行数 解题思路 方法一&#xff1a;二进制枚举 思路 使用二进制枚举所有选中列的集合&#xff0c;对于集合中的每一个二进制数…

whistle+SwitchyOmega前端api代理调试

1、whistle介绍 whistle官网whistle githubwhistle主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应&#xff0c;也可以作为HTTP代理服务器&#xff0c;功能很强大 2、安装教程 官方安装文档 // 全局安装whistle npm install -g whistle// 安装whistle的inspect插件&a…

three.js gltf后处理颜色异常(伽马校正)

效果&#xff1a; 应用了伽马校正&#xff0c;好像效果不明显 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"><…

Apache 网页优化

技能目标&#xff1a; 掌握 Apache 网页压缩掌握 Apache 网页缓存掌握Apache 隐藏版本信息掌握 Apache 网页防盗链 1.1网页压缩与缓存 在使用 Apache 作为 Web 服务器的过程中&#xff0c;只有对 Apache 服务器进行适当的优化配 置才能让 Apache 发挥出更好的性能。反过来说&…

快速打通 Vue 3(二):响应式对象基础

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

Java 变量与运算符

初识变量 内存中的一个存储区域&#xff0c;该区域的数据可以在同一类型范围内不断变化变量的构成包含三个要素&#xff1a;数据类型、变量名、存储的值Java 中变量声明的格式&#xff1a;数据类型 变量名 变量值 变量的数据类型 Java中变量的数据类型分为两大类&#xff1…

不会代码(零基础)学语音开发(语音控制板载双电机)

电机&#xff0c;可以说是在生活中无处不见。有句话形容它&#xff1a;只要动的地方就有电机的身影。 比方说&#xff1a;空调、冰箱、洗衣机、油烟机、电扇、吸尘器、电动剃须刀、电吹风、豆浆机、破壁机、空气净化器、洗碗机、电动牙刷等种种电器产品&#xff0c;无一不是使…

检测和缓解僵尸网络

僵尸网络源自“机器人网络”一词&#xff0c;是感染了恶意软件的网络或机器集群&#xff0c;允许黑客控制并发起一系列攻击。僵尸网络的强度完全取决于它所包含的受感染机器的数量。攻击者接管这些设备的操作&#xff0c;以使用僵尸网络命令和控制模型进行远程控制。 什么是僵…

排除启动类故障----三大实验

目录 一、模拟破坏mbr和分区表然后修复 二、修复grub引导故障 三、遗忘root用户密码 一、模拟破坏mbr和分区表然后修复 1、mbr处于第一块磁盘的第一个物理扇区&#xff0c;总共512个字节&#xff0c;前446个字节是grub程序&#xff0c;后面64个字节是分区表 2、故障原因&a…

实现中文jieba分词

目录 问题描述&#xff1a; 代码实现&#xff1a; 问题描述&#xff1a; 使用中文分词库jieba从给定的文本中提取指定范围内的前后词语。 特殊的&#xff0c;如果前面是‘的’即再向前取一位&#xff0c;这个可根据自己的实际需求做出更改。 代码实现&#xff1a; import j…

如何获取完整的中国DEM高程数据

地形数据&#xff0c;也叫dem数据&#xff0c;是我们在各项研究中最常使用的数据之一&#xff0c;通过地形数据我们可以分析地表的高程、坡度、坡向等信息&#xff01; 地形数据&#xff0c;也叫dem数据&#xff0c;是我们在各项研究中最常使用的数据之一&#xff0c;通过地形…

企业无法处理海量的大文件,FTP不可靠该如何进行替代?

FTP是一项标准协议&#xff0c;用于在网络中进行文件传输&#xff0c;最早于1971年问世&#xff0c;被认为是互联网的基石之一。FTP可在不同操作系统和网络环境下实现文件上传和下载&#xff0c;具备方便、迅速和高效的特性&#xff0c;广泛应用于网站建设、软件更新、数据备份…

frp配置内网穿透访问家里的nas

frp配置内网穿透访问家里的nas 需求 家里局域网内有台nas&#xff0c;在去公司的路上想访问它 其内网地址为&#xff1a; http://192.168.50.8:6002 工具 1.frp版本v0.53.2 下载地址&#xff1a; https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_li…

万界星空科技低代码平台:制造业数字化转型的捷径

低代码MES系统&#xff1a;制造业数字化转型的捷径 随着制造业的数字化转型&#xff0c;企业对生产管理系统的需求逐渐提高。传统的MES系统实施过程复杂、成本高昂&#xff0c;已经无法满足现代企业的快速发展需求。而低代码搭建MES系统的出现&#xff0c;为企业提供了一种高…

大创项目推荐 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…

Android 相机库CameraView源码解析 (四) : 带滤镜预览

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

借助开源自定义表单,实现流程化办公

实现流程化办公已经成为众多企业的发展目的和愿望&#xff0c;因为可以为企业提质增效、创造良好效益&#xff0c;因此在现代化职场办公中&#xff0c;流程化办公是众多客户追求的发展目的。开源自定义表单拥有较为突出的优势和特点&#xff0c;可以发挥其应有的市场价值和作用…

DBSCAN聚类算法

DBSCAN读作&#xff1a;DB Scan&#xff0c;是英语基于密度的噪声应用空间聚类&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;的简写。在理解K-means聚类算法之后再来理解DBSCAN就容易多了。 DBSCAN的步骤如下&#xff1a; 随机从一个…

weblogic中间件安装

1.下载jdk Java Archive Downloads - Java SE 6 下载jdk-6u45-linux-x64.bin 2.配置防火墙和SELINUX Redhat7操作系统配置防火墙&#xff0c;开放应用端口&#xff0c;例如7001&#xff1b; # firewall-cmd --permanent --add-port7001/tcp # firewall-cmd --reload 关闭selinu…