当前位置: 首页 > news >正文

算法与设计分析--实验一

蛮力算法的设计与分析(暴力)

这次是某不知名学院开学课程的第一次实验,一共5道题,来自力扣

第一题.216组合总和*力扣题目链接

第一道题是经典的树型回溯

class Solution {
public:vector<vector<int>> combinationSum3(int k, int n) {}
};

首先我们要知道,力扣上都是核心代码模式,也就是说你只要实现其中的核心部分,一般是一个函数或者结构,不用你从新开始写头文件之类的,比如这里需要你实现的函数就是这个combinationSum3 (计数总和3)。

需要的返回值是一个二维动态数组(c++代码)

右上角可以选择代码模式,这里以C++为例

先看一遍题目描述:

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。

解集不能包含重复的组合。 

示例 1:

输入: k = 3, n = 7

输出: [[1,2,4]]

示例 2:

输入: k = 3, n = 9

输出: [[1,2,6], [1,3,5], [2,3,4]]

也就是说,我们输出的组合不能重复,顺序无关

这道题就是dfs组合计数的升级版

因为时间效率低,所以题目数据不会很大,数据大了就得换其他方法了

先看一遍递归实现排列型枚举的代码

#include<iostream>using namespace std;const int  N= 10;int path[N], n;bool st[N];void dfs(int u)
{if(u>n){for(int i = 1; i <=n; i++) cout<<path[i]<<' ';puts("");}else{for(int i = 1; i<=n;i++){if(st[i] == false){path[u] = i;st[i] = true;dfs(u+1);st[i] = false;}}}
}
int main(){cin>>n;dfs(1);return 0;
}

我们同理,先存储路径和答案

vector<vector<int>> result; // 存放结果集vector<int> path; // 符合条件的结果

确定终止条件

        if (path.size() == k) {if (sum == targetSum) result.push_back(path);return;}

在初学dfs(回溯)时,画一个回溯图会更好理解一点

电脑上画图还是太难了,找一个别人的图

我们可以发现,我们题目要求的K,就是树的深度

每一层都是1~9的选择, 但是我们要注意,因为答案不重复,比如3,6和6,3是属于一个答案

所以我们每一次选择数字都要从该数字的后面开始选择,比如选择了2,下一层选择的数字就是3~9

当然,我们还发现可以剪枝优化,

比如当SUM>我们的target的时候,我们就不用向下遍历了

还有就是当剩下可以选择的数字小于K了,我们也不用向下遍历了

代码+注释如下

class Solution {
private:vector<vector<int>> result; // 存放结果集vector<int> path; // 符合条件的结果void backtracking(int targetSum, int k, int sum, int startIndex) { //最后一个参数为开始选择的数字,防止出现重复组合if (sum > targetSum) { // 剪枝操作1return; // 如果path.size() == k 但sum != targetSum 直接返回}if (path.size() == k) { // 终止条件,可以返回了if (sum == targetSum) result.push_back(path);return;}for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝操作2sum += i; // 处理path.push_back(i); // 处理backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndexsum -= i; // 回溯 还原现场path.pop_back(); // 回溯 还原现场}}public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(n, k, 0, 1);return result;}
};

第二题.206反转链表力扣题目链接

这道题是基础中的基础了

题目描述:

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

思路也很简单 就是遍历链表 遍历链表每一个节点的时候把该节点指向前一个节点

当然,为了原链表不被打乱,我们需要一个临时节点

代码+注释如下

class Solution {ListNode* reverse(ListNode* pre,ListNode* cur){//参数为 前节点 当前节点if(cur == NULL)return pre; //如果是空链表 直接返回 auto temp = cur->next; //临时节点指向当前节点的下一节点 为了遍历cur->next = pre;//当前节点指向前一节点return  reverse(cur,temp); //递归往后遍历}
public:ListNode* reverseList(ListNode* head) {return reverse(NULL,head);//传入头节点}
};

第三题:1160.拼写单词力扣题目链接

先看一遍题目描述

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。

假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。

注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和。

示例 1:

输入:words = ["cat","bt","hat","tree"], chars = "atach"

输出:6

解释:

可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。

示例 2:

输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"

输出:10

解释:

可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。

提示:

1 <= words.length <= 1000

1 <= words[i].length, chars.length <= 100

所有字符串中都仅包含小写英文字母

class Solution {
public:int countCharacters(vector<string>& words, string chars) {}
};

题目传入的是一个字符串动态数组,一个目标字符串

这道题出在这样有点怪怪的,一开始用dfs没做出来

用类似哈希的做法就轻松搞定了

原理就是把chars里的每一个字母进行计数,当目标单词中每个字母计数不为0时,则证明能拼出这个单词

代码+注释如下:
 

class Solution {
public:int countCharacters(vector<string>& words, string chars) {int m[26]; // 计数,类哈希表,保存chars每个字母出现的次数memset(m, 0, sizeof(m)); //不是全局变量 得初始化for (char ch : chars) {m[ch-'a'] ++; //计数}int ret = 0;for (auto word : words) {int temp[26];memcpy(temp, m, sizeof(m));bool canSpell = true;for (char ch : word) {if (temp[ch-'a'] == 0) {canSpell = false;break;}temp[ch-'a'] --;}if (canSpell) {ret += word.size();}}return ret;}
};

第四题 
1475. 商品折扣后的最终价格

题目描述:

给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。

商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > i 且 prices[j] <= prices[i] 的 最小下标 ,如果没有满足条件的 j ,你将没有任何折扣。

请你返回一个数组,数组中第 i 个元素是折扣后你购买商品 i 最终需要支付的价格。

示例 1:

输入:prices = [8,4,6,2,3]

输出:[4,2,4,2,3]

解释:

商品 0 的价格为 price[0]=8 ,你将得到 prices[1]=4 的折扣,所以最终价格为 8 - 4 = 4 。

商品 1 的价格为 price[1]=4 ,你将得到 prices[3]=2 的折扣,所以最终价格为 4 - 2 = 2 。

商品 2 的价格为 price[2]=6 ,你将得到 prices[3]=2 的折扣,所以最终价格为 6 - 2 = 4 。

商品 3 和 4 都没有折扣。

示例 2:

输入:prices = [1,2,3,4,5]

输出:[1,2,3,4,5]

解释:在这个例子中,所有商品都没有折扣。

示例 3:

输入:prices = [10,1,1,6]

输出:[9,0,1,6]

提示:

1 <= prices.length <= 500

1 <= prices[i] <= 10^3

简单题,我们可以完全按照题目意思写一个二重循环遍历就好

数据也不大,暴力就能过(废话,不能怎么叫暴力算法试验报告)

class Solution {
public:vector<int> finalPrices(vector<int>& prices) {vector<int> res;  //不改变原数组 开个数组存答案bool flag = true; //判断是否加入答案for(int i = 0; i < prices.size(); i ++ ){for(int j = 1; j < prices.size(); j ++ ){if(j > i && prices[j] <= prices[i]) // 题目给的条件照抄{res.push_back(prices[i] - prices[j]);flag = false;break;}}if(flag) res.push_back(prices[i]);elseflag = true; }return res;}
};

看了一下评论,这道题单调栈也能做,时间复杂度能优化到O(n)

class Solution {
public:vector<int> finalPrices(vector<int>& prices) {//维护一个价格单调递增的栈存储索引值//若当前价格小于栈顶所指价格,则栈顶索引值出栈,计算该索引处折扣后的价格,直到栈为空或当前价格大于栈顶所指价格//将当前索引入栈if(prices.empty()) return {};stack<int> s;int len=prices.size();vector<int> ans(len);s.push(0); //将第一个元素的索引入栈for(int i=1;i<len;++i){while(!s.empty()&&prices[i]<=prices[s.top()]){ans[s.top()]=prices[s.top()]-prices[i]; //计算折扣后的价格s.pop(); //出栈}s.push(i);}while(!s.empty()) //剩余的是没有折扣的{ans[s.top()]=prices[s.top()];s.pop();}return ans;}
};

第五题
1518. 换水问题

题目描述:

小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。

如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。

请你计算 最多 能喝到多少瓶酒。

输入:numBottles = 9, numExchange = 3

输出:13

解释:你可以用 3 个空酒瓶兑换 1 瓶酒。

所以最多能喝到 9 + 3 + 1 = 13 瓶酒。

输入:numBottles = 15, numExchange = 4

输出:19

解释:你可以用 4 个空酒瓶兑换 1 瓶酒。

所以最多能喝到 15 + 3 + 1 = 19 瓶酒。

示例 3:

输入:numBottles = 5, numExchange = 5

输出:6

示例 4:

输入:numBottles = 2, numExchange = 3

输出:2

 提示:

1 <= numBottles <= 100

2 <= numExchange <= 100

看着题目很复杂,实际上那是非常非常的简单,之前的题目瓶盖还能换酒,这个只有瓶子能换酒

大一的C语言基础题都比这难

不说了,直接上代码和注释,看完应该都能懂 也不用什么优化了,暴力算法已经超越100%了,这题基数小,暴力最快

class Solution {
public:int numWaterBottles(int numBottles, int numExchange) {int res = 0; //存答案int temp = numBottles;  // 存初始瓶数res += numBottles;while(temp >= numExchange) //如果剩下的瓶子换不了就结束{res += temp / numExchange;int temp2 = temp % numExchange; // 记得要加上上一轮换不了的余数temp /= numExchange;temp += temp2;}return res;}
};

总结:

新学期算法课的第一次试验,除了第一题有难度,其他基本是拿来凑数的

第一题是搜索和回溯,也是真正“暴力”算法的样子,其他的更多像一个模拟题,复述题目内容就好

半年了,学校蓝桥杯的报名费都还没报销,真是对自己学算法的同学极大的鼓励啊

相关文章:

算法与设计分析--实验一

蛮力算法的设计与分析&#xff08;暴力&#xff09; 这次是某不知名学院开学课程的第一次实验&#xff0c;一共5道题&#xff0c;来自力扣 第一题.216组合总和*力扣题目链接 第一道题是经典的树型回溯 class Solution { public:vector<vector<int>> combinatio…...

ElementUI浅尝辄止28:Dropdown 下拉菜单

将动作或菜单折叠到下拉菜单中。 1.如何使用&#xff1f; 移动到下拉菜单上&#xff0c;展开更多操作。 //通过组件slot来设置下拉触发的元素以及需要通过具名slot为dropdown 来设置下拉菜单。默认情况下&#xff0c;下拉按钮只要hover即可&#xff0c;无需点击也会显示下拉菜…...

jupyter 格式化与快捷键

1、标题&#xff1a; # 一级标题 ## 二级标题 ### 三级标题 2、 加粗文本&#xff1a; **加粗文本** 3、斜体文本&#xff1a; _斜体_ 4、删除线 ~删除线~ 5、高亮文本 高亮文本 6、区块引用 > 我是引用文字 >> 我是第二层 >&g…...

Spring以及SpringBoot/SpringCloud注解

一、SpringBoot/Spring 1、SpringBootApplication 包含Configuration、EnableAutoConfiguration、ComponentScan通常在主类上 其中ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文&#xff0c;如果扫描到有Component Controller Service等这些注解的…...

vim常用操作

一、Esc键 & 命令模式 1.撤销&#xff1a;u 恢复撤销&#xff1a;Ctrl r 2.定位 行首&#xff1a;0 行尾&#xff1a;$ 第7行&#xff1a;7G 3.编辑 下行开始插入&#xff1a; o 删除行&#xff1a;dd 复制3行并粘贴&#xff1a;3yy ---> p 复制单词并粘贴&#…...

Serverless Framework 亚马逊云(AWS)中国地区部署指南

Serverless Framework 亚马逊云(AWS)中国地区部署指南 Serverless Framework 亚马逊云(AWS)中国地区部署指南 前言前置准备 1. 账号的注册2. 全局安装 serverless3. 设置你的系统环境变量4. 设置部署凭证 快速部署一个 hello world 创建入口函数 index.js event 参数context 参…...

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解 文章目录 【Spring Cloud系统】- 轻量级高可用工具Keepalive详解一、概述二、Keepalive分类2.1 TCP的keepalive2.2 HTTP的keep-alive2.3 TCP的 KeepAlive 和 HTTP的 Keep-Alive区别 三、nginx的keepalive配置3.1 nginx保持…...

【JAVA-Day05】深入理解Java数据类型和取值范围

深入理解Java数据类型和取值范围 深入理解Java数据类型和取值范围摘要一、Java的数据类型1.1 存储单位1.2 Java基本数据类型 二、Java的取值范围2.1 变量定义2.2 取值范围验证 三、总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb;…...

“JSR303和拦截器在Java Web开发中的应用与实践“

目录 引言JSR303什么是JSR303?为什么要使用JSR303?常用注解快速入门JSR303 拦截器什么是拦截器拦截器与过滤器应用场景快速入门拦截器 总结 引言 在Java Web开发过程中&#xff0c;我们经常会遇到需要对输入数据进行验证和处理&#xff0c;同时需要对请求进行拦截与控制的需…...

第六章 图 六、最小生成树(Prim算法、Kruskal算法)

一、定义 对于一个带权连通无向图G(V,E)&#xff0c;生成树不同&#xff0c;每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称为G的最小生成树(Minimum-Spanning-Tree, MST)。 二、手…...

机器学习笔记 - 什么是 MLOps?

什么是 MLOps? Machine learning operations (MLOps) 作为一个新兴领域,MLOps 在数据科学家、机器学习工程师和人工智能爱好者中迅速崛起。MLOps 代表机器学习操作。MLOps 是机器学习工程的核心功能,专注于简化将机器学习模型投入生产、然后维护和监控的过程。MLOps 是一种…...

初阶扫雷(超详解)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;C语言小游戏 &#x1f388;推荐相关博文&#xff1a;初阶三子棋&#xff08;超详解&#xff09; 初阶扫雷 1.游戏介绍2.基本思路3.实现前的准备4.实现步骤4.1 打印菜单4.2 初始化扫雷棋盘4.3 打印扫雷棋…...

计算机视觉CV:1000字总结介绍

目录 1.CV计算机视觉 2.计算机视觉的应用 3.计算机视觉的基本技术 4.计算机视觉的发展趋势 1.CV计算机视觉 计算机视觉&#xff08;Computer Vision, CV&#xff09;是指通过计算机技术模拟人类视觉&#xff0c;让计算机能够“看”懂和理解图像和视频。计算机视觉发展了多…...

JavaScript 之 Symbol 数据类型

一、简介 ​ symbol类型是ES6新引入的一种基本数据类型&#xff0c;该类型具有静态属性和静态方法。其中静态属性暴露了几个内建的成员对象&#xff0c;静态方法暴露了全局的symbol注册。 ​ symbol类型具有以下特点&#xff1a;① 唯一性&#xff1a;每个symbol值都是唯一的…...

在Docker中运行PostgreSQL数据库

1.下载Docker 2.设置DockerHub账号 3.运行Docker并下载Image 4.启动PostgreSQL Image 5.连接到数据库运行SQL docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORDmysecretpassword -d postgres 开放端口从Docker容器到主操作系统&#xff0c;这将允许我们…...

实现Spring Boot集成MyBatis

引言 在Java开发中&#xff0c;Spring Boot和MyBatis是非常常用的框架。Spring Boot是一个快速开发应用程序的框架&#xff0c;而MyBatis是一个持久化框架&#xff0c;可以方便地操作数据库。本文将介绍如何使用Idea集成Spring Boot和MyBatis&#xff0c;并创建一个简单的示例…...

关于算法的时间复杂度(度量算法执行时间的两种方法、渐进时间复杂度、时间复杂度的几个性质、渐进估算、常见的渐进时间复杂度排序)

目录 度量算法执行时间的两种方法 事后统计法&#xff08;Post Hoc Analysis&#xff09;&#xff1a; 事前统计法&#xff08;Pre Hoc Analysis&#xff09;&#xff1a; 渐进时间复杂度 时间复杂度的几个性质 渐进估算 常见的渐进时间复杂度排序 度量算法执行时间的两…...

SpringBoot项目--电脑商城【显示商品详情功能】

1.持久层[Mapper] 1规划需要执行的SQL语句 根据商品id显示商品详情的SQL语句 SELECT * FROM t_product WHERE id?2 设计接口和抽象方法 在ProductMapper接口中添加抽象方法 /*** 根据商品id查询商品详情* param id 商品id* return 匹配的商品详情&#xff0c;如果没有匹配…...

VLAN笔记

虚拟VLAN 什么是VLAN VLAN的作用 VLAN的优缺点 VLAN的配置方法 VLAN有哪些接口模式 access与trunk接口的区别 Hybrid接口 拓扑实验enspCiscoH3C ​ 什么是VLAN VLAN&#xff08;Virtual Local Area Network&#xff09;又称虚拟局域网&#xff0c;是指在交换局域网的基础上&a…...

分类算法系列⑤:决策树

目录 1、认识决策树 2、决策树的概念 3、决策树分类原理 基本原理 数学公式 4、信息熵的作用 5、决策树的划分依据之一&#xff1a;信息增益 5.1、定义与公式 5.2、⭐手动计算案例 5.3、log值逼近 6、决策树的三种算法实现 7、API 8、⭐两个代码案例 8.1、决策树…...

前端面试(基础)

一、CSS 1.说一下CSS的盒模型。 在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成&#xff1a;内容content、内边距padding、边框border、外边距margin 盒模型的类型&#xff1a; 标准盒模型 margin border padding content IE盒模型 margin content(border…...

element-ui switch开关组件二次封装,添加loading效果,点击时调用接口后改变状态

先看效果&#xff1a; element-ui中的switch开关无loading属性&#xff08;在element-plus时加入了&#xff09;&#xff0c;而且点击时开关状态就会切换&#xff0c;这使得在需要调用接口后再改变开关状态变得比较麻烦。 思路&#xff1a;switch开关外包一层div&#xff0c;给…...

【GAN小白入门】Semi-Supervised GAN 理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊🚀 文章来源:K同学的学习圈子论文原文:Semi-Supervised Learning with Generative Adversarial Networks.pdf在学习GAN的时候你有没有想过这样一个问题呢,如果我们生成的图像是带有标签的,例如数…...

Python自动化测试(1)-自动化测试及基本技术手段概述

生产力概述 在如今以google为首的互联网时代&#xff0c;软件的开发和生产模式都已经发生了变化&#xff0c; 在《参与感》一书提到&#xff1a;某位从微软出来的工程师很困惑&#xff0c;微软在google还有facebook这些公司发展的时候&#xff0c;为何为感觉没法有效还击&…...

小程序中如何查看会员的余额和变更记录

​通过查看会员的余额和变更记录&#xff0c;可以帮助商家更好地管理会员资金&#xff0c;提供更好的服务和用户体验。下面将介绍小程序中如何查看会员的余额以及余额的变更记录。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要查看余额和记录的会员…...

【项目经验】elementui--table表格自定义表头及bug

一.思路 首先我们肯定得循环表头&#xff0c;我们原生js封装的表格的实现原理就是这样。其次我们要把自己循环的label显示出来&#xff0c;对应的prop也要和表格数据相对应。用div标签循环都会出现错误&#xff08;div里面套column&#xff09;&#xff0c;大家不要踩坑。第一…...

flink实现kafka、doris精准一次说明

前言说明:本文档只讨论数据源为kafka的情况实现kafka和doris的精准一次写入 flink的kafka连接器已经实现了自动提交偏移量到kafka,当flink中的数据写入成功后,flink会将这批次数据的offset提交到kafka,程序重启时,kafka中记录了当前groupId消费的offset位置,开始消费时将…...

【git】git commit、push之前自动执行脚本

可以使用 Git 的钩子&#xff08;hooks&#xff09;功能。Git 钩子是在特定事件发生时执行自定义脚本的方式。 下面是一个使用 pre-commit 钩子的例子&#xff0c;用于在执行 git commit 之前自动执行脚本&#xff1a; 进入你的 Git 仓库的根目录。进入 .git/hooks 目录&…...

基于springboot+vue的加盟店管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

Gin中的Cookie和Session的用法

Gin中的Cookie和Session的用法 文章目录 Gin中的Cookie和Session的用法介绍Cookie代码演示 Session代码展示 介绍 cookie 和 session 是 Web 开发中常用的两种技术&#xff0c;主要用于跟踪用户的状态信息。 Cookie func (c *Context) Cookie(name string, value string, max…...

政府网站建设工作意义/武汉seo关键词优化

定义在data之外的数据&#xff0c;是无法响应的渲染&#xff0c;意思就是改变数据页面也不会刷新&#xff0c;所以一切要渲染到页面上的数据&#xff0c;必须写在data中 vue只会将已经在data中声明的属性变为响应&#xff0c;没有声明的是不响应的 var vm new Vue({data:{a:1…...

如何扫描网站漏洞/百度关键字优化

本文将向读者介绍两个方面的内容&#xff0c;如何通过 WebSphere DataPower 实现服务组装&#xff0c;以及如何对一组服务统一安全控制&#xff0c;日志&#xff0c;计费等操作。本文涉及如何在 WebSphere DataPower 中访问外部服务&#xff0c;XSLT 编程扩展以及加密解密&…...

有中文网站 怎么做英文网站/百度推广话术全流程

1、项目的典型用户与场景 2、对其他组评价 强强联手队项目做得很好&#xff0c;不过如果能够把连网操作就更好了。 滑稽队项目的前台设计挺好&#xff0c;如果把包车的信息都放进数据库就更好了。 梦之翼队的项目做得不错&#xff0c;可以看出他们做得非常的认真&#xff0c;但…...

照片制作网站/百度提交入口的网址

iFrame 虽然在我们现在的网页中用的不多&#xff0c;不过依然无法捍卫其使用便捷的地位&#xff0c;特别是编写后台的时候&#xff0c;实现局部的网页内容刷新&#xff0c;提高网页内容的复用性。iFrame 里的 JavaScript 要操作父级窗口的 DOM 元素&#xff0c;必须搞懂几个对象…...

广州哪家做网站好/网站开发软件

1 编辑: paste/sort/uniq/cut/tr/splitpaste 将文件按照行合并&#xff0c;默认分隔符为tab。用-d指定分隔符。rootubuntu:/home/fsj/templates# cat 1.txtbcaedfrootubuntu:/home/fsj/templates# cat 2.txt3245111rootubuntu:/home/fsj/templates# paste 1.txt 2.txtb 3c 2a 4…...

wordpress搜索功能加强/直播回放老卡怎么回事

PHP文章摘要生成方法(函数)文章生成摘要的方法有多种&#xff0c;可以用JS在客户端生成&#xff0c;也可以在服务器端生成&#xff0c;当然更不排除在数据库中加一个摘要字段&#xff0c;在发布文章的时候自行设置。以下是在服务器端生成时的方法。我们在写BLOG时经常需要显示文…...