纪念第一次正式参加,听说这次题目很水,感觉确实不是很难,一般前两题都很简单,这次,到第三题的时候,都还可以做,emm......

实际代码记录:

#include <iostream>
#include <vector>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std; /*
* 功能:初始化m行n列的二维vector
* 参数:m,n,vector
*/
void init(int m, int n, vector<vector<int> > &vc) {
//初始化一个数组m行 n列
vector<int> level;
level.resize(n);
vc.resize(m, level);
for (int i = ; i < m;i++)
{
for (int j = ; j < n; j++)
{
cin >> vc[i][j];
}
}
} /*
* 功能:输出vector
* 参数:vector
*/
void vecPrint(const vector<vector<int> > vc)
{
//输出
cout << "The vector vc is as follow:" << endl;
int m = vc.size();
int n = vc[].size();
for (int i = ; i < m; i++)
{
for (int j = ; j < n; j++)
{
cout << vc[i][j] << "\t";
}
cout << endl;
}
} int minTimeToVisitAllPoints(vector<vector<int> >& points) {
int m = points.size();
int n = ; //只存在横纵坐标,两个
int cost_time = ; //记录总时间
int x1, x2, y1, y2;
for (int i = ; i < m; i++)
{
//记录两个点
x1 = points[i - ][];
y1 = points[i - ][];
x2 = points[i][];
y2 = points[i][]; //计算两个点之间的最小时间
if (x1 == x2) {
//位于同一条直线上
cost_time += abs(y1-y2);
}
else if (y1 == y2) {
cost_time += abs(x1 - x2);
}
else if (x1 < x2 && y1 < y2) {
//位于右上方
while (x1 < x2 && y1 < y2)
{
x1++;
y1++;
cost_time++;
}
//底下至少有一个为0
cost_time += abs(x1 - x2);
cost_time += abs(y1 - y2);
}
else if (x1 > x2 && y1 < y2) {
//位于左上方
while (x1 > x2 && y1 < y2)
{
x1--;
y1++;
cost_time++;
}
//底下至少有一个为0
cost_time += abs(x1 - x2);
cost_time += abs(y1 - y2);
}
else if (x1 > x2 && y1 > y2) {
//位于左下方
while (x1 > x2 && y1 > y2)
{
x1--;
y1--;
cost_time++;
}
//底下至少有一个为0
cost_time += abs(x1 - x2);
cost_time += abs(y1 - y2);
}
else if (x1 < x2 && y1 > y2) {
//位于右下方
while (x1 < x2 && y1 > y2)
{
x1++;
y1--;
cost_time++;
}
//底下至少有一个为0
cost_time += abs(x1 - x2);
cost_time += abs(y1 - y2);
}
}
return cost_time;
} int countServers(vector<vector<int>>& grid) {
//对每行没列进行标记
int result = ;
int i, j, k;
for (i = ; i < grid.size(); i++)
{
for (j = ; j < grid[].size(); j++)
{
if (grid[i][j] == ) {
//看i行或j列是否存在i
int flag = ;
for (k = ; k < grid.size(); k++)
{
if (k != i && grid[k][j] == )
{
result += ;
flag = ; //表示行找到了
break;
}
}
if (flag == ) { //如果行没有找到,需要找列
for (k = ; k < grid[].size(); k++)
{
if (k != j && grid[i][k] == )
{
result += ;
break;
}
}
}
}
}
}
return result;
} /*
int main()
{ int m, n;
cin >> m >> n;
vector<vector<int> > vc;
init(m,n,vc);
vecPrint(vc);
//cout << minTimeToVisitAllPoints(vc) << endl;
cout << countServers(vc) << endl; return 0;
}
*/ vector<vector<string> > suggestedProducts(vector<string>& products, string searchWord) {
vector<vector<string> > result;
//vector<string> level = products; //处理level
//sort排序试试
sort(products.begin(), products.end());
//输出查看效果
int i;
/*
for (i = 0; i < products.size(); i++) {
cout << products[i] << endl;
}
*/
//排序结束,然后进行查找
int len = searchWord.length();
int k=;
while (len--)
{
int count = ;
string condistr; //候选字符串
condistr = searchWord.substr(, k);
//cout << "候选模式串为:" << condistr << endl;
vector<string> level;
for (i = ; i < products.size(); i++)
{
if (products[i].substr(, k) == condistr)
{
if (count < )
{
level.push_back(products[i]);
count++;
cout << products[i] << " ";
} }
}
cout << endl;
result.push_back(level);
level.clear();
k++;
}
return result;
} /*
int main()
{
vector<string> result;
string str;
int k;
cin >> k;
while (k--)
{
cin >> str;
result.push_back(str);
}
suggestedProducts(result,"mouse");
return 0;
}
*/ /*
5
mobile
mouse
moneypot
monitor
mousepad
*/

题目:(前三题比较简单,只总结最后一题)

  有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。

  每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。

  给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。

  由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。

  示例 1:

  输入:steps = 3, arrLen = 2
  输出:4

  解释:3 步后,总共有 4 种不同的方法可以停在索引 0 处。
  向右,向左,不动
  不动,向右,向左
  向右,不动,向左
  不动,不动,不动

理解:

  方案一、(自己的想法)

  拿到这道题的第一想法是,枚举解答树,只有三种走法,左走,不动,右走,那么我可以申请一个数组d[3],初始化该数组为d[3]={-1,0,1},即可以将当前的索引位置想象成数轴上的原点坐标,当前位置为pos,往左走一步,位置变为pos-1,不动的情况位置仍为pos,往右走一步,位置变为pos+1。利用一个解答树,判断走了steps步以后,是否为原点0,即可求得最终解;

  以示例1为例,我们可以画一棵树,如下所示:

  

  注意:1.当位于原点0时,向左走到了-1的位置,超出了最左限制,当位于数组末尾时,向右走到了2的位置,超出了最右限制;

     2.当遍历到最后一步,即最后一层时,我们如果总和sum等于0,说明经过上三步之后,仍位于原点位置,否则直接return。

  因此,我们总结出如下代码:(不考虑模100000007的结果)

  代码如下:

  

 class Solution {
public:
int d[] = { ,-, }; //不动,左,右
int count = ;
int sum = ;
int numWays(int steps, int arrLen) {
dfs(,steps,arrLen,sum);
return count;
} void dfs(int depth,int step,int arrLen,int sum) //step
{
if (depth >= step)
{
if (sum == )
count++;
return;
}
if (sum < || sum >= arrLen)
return;
for (int i = ; i < ; i++)
{
dfs(depth + ,step,arrLen,sum+d[i]);
}
}
};

  很遗憾,这样的递归遍历方式,在27步的时候,就超时了,但是贴到这儿是为了学习,哈哈!

  方案二、(学习别人的动态规划思想)

  学会再来补充啦~

Leetcode 5274. 停在原地的方案数的更多相关文章

  1. 【js】Leetcode每日一题-停在原地的方案数

    [js]Leetcode每日一题-停在原地的方案数 [题目描述] 有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处. 每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指 ...

  2. leetcode-164周赛-1269-停在原地的方案数

    题目描述: 自己的提交: class Solution: def numWays(self, steps: int, arrLen: int) -> int: l = min(steps,arr ...

  3. LeetCode 5274. Number of Ways to Stay in the Same Place After Some Steps - Java - DP

    题目链接:5274. 停在原地的方案数 You have a pointer at index 0 in an array of size arrLen. At each step, you can ...

  4. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  5. Codeforces 461B. Appleman and Tree[树形DP 方案数]

    B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  6. NOIP2012pj摆花[DP 多重背包方案数]

    题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

  7. UVa 11137 (完全背包方案数) Ingenuous Cubrency

    题意:用13.23……k3这些数加起来组成n,输出总方案数 d(i, j)表示前i个数构成j的方案数则有 d(i, j) = d(i-1, j) + d(i, j - i3) 可以像01背包那样用滚动 ...

  8. 删数方案数(regex)

    [题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...

  9. poj2975 Nim 胜利的方案数

    Nim Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5545   Accepted: 2597 Description N ...

随机推荐

  1. 【LeetCode】230. Kth Smallest Element in a BST

    Difficulty: Medium  More:[目录]LeetCode Java实现 Description https://leetcode.com/problems/kth-smallest- ...

  2. jQuery浮窗图片到页面中间的代码兼容移动端

    jQuery浮窗图片到页面中间的代码兼容移动端 <!doctype html> <html> <head> <meta charset="utf-8 ...

  3. CTS,CLS,CLR解释

    问题阐述 CTS.CLS和 CLR分别是什么意思? 专家解答 CTS.CLS和 CLR是.NET框架的 3个核心部分,下面分别对它们进行介绍. (1)CTS CTS即通用类型系统,它定义了如何在.NE ...

  4. IDEA 部署spring Cloud

    Spring cloud Eureka Eureka Server,注册中心 Eureka Client,所有要进行注册的微服务通过Eureka Client 连接到 Eureka Server ,完 ...

  5. Object.entries和Object.fromEntries

    语法 Object.entries(obj) 参数 obj 可以返回其可枚举属性的键值对的对象. 返回值 给定对象自身可枚举属性的键值对数组 语法 Object.fromEntries(iterabl ...

  6. WorkFlow一:WorkFlow基础配置

    1.使用事物代码SWU3进入WF配置页. 2.展开第一个运行环境维护文件夹,选中第一个配置RFC目标,点击生成.完成后可点击运行按钮测试是否成功. 同上,挨个激活. 3.激活第二个文件夹‘维护环境定义 ...

  7. Java集合目录

    java集合学习(1):集合框架 java集合学习(2):Map和HashMap Java集合学习(4):HashTable Java集合学习(5):LinkedHashMap Java集合学习(6) ...

  8. 02篇ELK日志系统——升级版集群之kibana和logstash的搭建整合

    [ 前言:01篇LK日志系统已经把es集群搭建好了,接下来02篇搭建kibana和logstash,并整合完成整个ELK日志系统的初步搭建. ] 1.安装kibana 3台服务器: 192.168.2 ...

  9. Vue2.0 新手入门 — 从环境搭建到发布

    什么是 Vue Vue 是一个前端框架,特点是数据绑定 比如你改变一个输入框 Input 标签的值,会自动同步更新到页面上其他绑定该输入框的组件的值 组件化 页面上小到一个按钮都可以是一个单独的文件. ...

  10. SSH Weak Encryption Algorithms Supported

    SSH使用了弱加密算法,解决方法: 在/etc/ssh/sshd_config中显式指定ssh通讯时使用的加密算法 在文件的最后加上: Ciphers aes128-ctr,aes192-ctr,ae ...