目录
1、添加逗号
1.1 题目
1.2 思路
1.3 代码实现
2、 跳台阶
2.1 题目
2.2 思路
2.3 代码实现
dp
滚动数组
3、扑克牌顺子
3.1 题目
3.2 题目
3.3 代码实现
1、添加逗号
1.1 题目
1.2 思路
读完题,我们知道了要将一个数的每三位用逗号分割。
所以我们可以用一个string,遍历原数将其尾插string中,每三位后放入一个逗号,然后再继续遍历,再放入。注意:如果最后一位刚好要放入逗号,要把逗号删除。
这里如果我们输入的是一个整数的话,我们会发现不好遍历,所以我们直接将其作为字符串输入,方便我们遍历。
思路并不难,注意一下细节问题,接下来就是代码实现。
1.3 代码实现
#include <iostream>
using namespace std;int main()
{string str;cin >> str;string ret;int n = str.size();for(int i = 0; i < n;i++){ret += str[i];//每三位添加一个逗号,当是最后一位时不添加if((n-i-1) % 3 == 0 && i != n-1) ret += ',';}cout << ret << endl;return 0;
}
2、 跳台阶
2.1 题目
2.2 思路
读完题,我们发现这道题是一道经典的dp动态规划问题,求青蛙对于n个台阶最多能有多少种跳法。所以先分析一下dp的状态表示和状态转移方程。
青蛙一次挑一节或者两节,根据示例不难分析出状态转移方程:dp[i] = dp[i-1]+dp[i-2];
注意一下:dp[0] = 0; dp[1] = 1; dp[2] = 2;
2.3 代码实现
dp
#include <iostream>
using namespace std;int dp[41];int main()
{int n = 0; cin >> n;dp[0] = 0,dp[1] = 1,dp[2] = 2;for(int i = 3;i <= n;i++){dp[i] = dp[i-1] + dp[i-2];}cout << dp[n] << endl;return 0;
}
滚动数组
我们也可以不用真的创建一个dp表,用滚动数组的方式去解决
#include <iostream>
using namespace std;int main()
{int n;cin >> n;int a = 1,b = 1,c;for(int i = 2;i <= n; i++){c = a+b;a = b;b = c;}if(n == 0 || n== 1)cout << n << endl;elsecout << c << endl; return 0;
}
3、扑克牌顺子
3.1 题目
3.2 题目
读完题,我们知道了扑克牌的范围是[0,13],其中大小王是0,并且是万能牌,要判断是否是顺子,首先就不能有重复数,否则就不是顺子,其次就是一次输入五张牌,那么最大的那张牌和最小的那张差值不能超过四,只要差值大于四,那么无论大小王怎么替换,都不能组成顺子。
仅需满足上述两个条件,就能判断出是否为顺子了,接下来就是代码实现。
3.3 代码实现
class Solution {
public:bool hash[14] = {0};bool IsContinuous(vector<int>& numbers) {int maxVal = 0,minVal = 14;for(auto x : numbers){if(x){if(hash[x])return false;hash[x] = true;maxVal = max(maxVal,x);minVal = min(minVal,x);}}return maxVal-minVal <= 4;}
};
本篇完,下篇见!