Leetcode 5274. 停在原地的方案数
纪念第一次正式参加,听说这次题目很水,感觉确实不是很难,一般前两题都很简单,这次,到第三题的时候,都还可以做,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. 停在原地的方案数的更多相关文章
- 【js】Leetcode每日一题-停在原地的方案数
[js]Leetcode每日一题-停在原地的方案数 [题目描述] 有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处. 每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指 ...
- leetcode-164周赛-1269-停在原地的方案数
题目描述: 自己的提交: class Solution: def numWays(self, steps: int, arrLen: int) -> int: l = min(steps,arr ...
- 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 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- Codeforces 461B. Appleman and Tree[树形DP 方案数]
B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- NOIP2012pj摆花[DP 多重背包方案数]
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- 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背包那样用滚动 ...
- 删数方案数(regex)
[题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...
- poj2975 Nim 胜利的方案数
Nim Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5545 Accepted: 2597 Description N ...
随机推荐
- WebUploader 上传文件 错误总结
近日做文件上传,粗心的问题和技术不精的问题导致了很多的bug,大部分时间都是在找自己写出来的bug,近日总结一下使用 WebUploader 开启分片上传的使用方法以及注意事项 1.上传过程中,后续上 ...
- 初始认知学习 .net core 逐步加深
1.一般用空项目练手 2.一般你已经有数据库的情况下使用如下的方式 开始生成类的操作 这里我使用的是Database First模式,使用工具Scaffold-DbContext(数据库上下文脚手架) ...
- ASP.NET Core 应用程序状态
在ASP.NET Core中,由多种途径可以对应用程序状态进行管理,使用哪种途径,由检索状态的时机和方式决定. 应用程序状态指的是用于描述当前状况的任意数据.包括全局和用户特有的数据. 开发人员可以根 ...
- 自定义Robotframework,Appium的一个关键字(用于点击目标图片,用于Appium无法识别的一些图片元素)
Appium无法识别的一些图片元素,必须先通过图片找坐标,进而通过点击坐标解决问题. 1.先在terminer运行安装命令: pip install robotframework-appiumlib ...
- 如何提升Web前端性能?
什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情.我们来看看用户访问网站,浏览器都做了哪些事情:输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 ...
- django_restframework项目之数据库搭建(二)
数据库配置 创建数据库 """ 1.管理员连接数据库 2.创建数据库 >: create database luffy default charset=utf8; ...
- springboot搭建dubbo+zookeeper简单案例
背景:只是自己使用单机版zookeeper搭建dubbo的一个学习案例,记录成功的过程 1.搭建zookeeper坏境 使用docker来构建环境 1.1 拉取镜像:docker pull zooke ...
- Linux shell if条件判断2
前面介绍linux shell的if判断的语法,现在再补充一点. Linux shell if条件判断1 分支判断结构 if , case 下面两个结构语法,已经在前面有过示例. 结构1: ...
- python数据类型之二
列表 list #定义:[]内可以有多个任意类型的值,逗号分隔 基本语法 # 定义:[]内可以有多个任意类型的值,逗号分隔 # my_girl_friends=['alex','wupeiqi','y ...
- MessagePack详解
版权声明:分享是一种品质,开源是一种精神. https://blog.csdn.net/wangmx1993328/article/details/84477073 MessagePack Intro ...