Day 9
目录
- 1.添加逗号 (pass)
- 1.1 解析
- 1.2代码
- 2.跳台阶 (pass)
- 2.1 解析
- 2.2 代码
- 3.扑克牌顺子 (pass)
- 3.1 解析
- 3.2 代码
1.添加逗号 (pass)
添加逗号
模拟、字符串
1.1 解析
1.2代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//方法一:
int main()
{
int n=0;
cin>>n;
string ret;
int count=0;//计数
while(n)
{
count++;
ret+=to_string(n%10);
n/=10;
if(count%3==0) ret+=',';
}
//判断最后一个位置
if(ret.back()==',') ret.pop_back();
reverse(ret.begin(),ret.end());
cout<<ret;
return 0;
}
//方法二:
int main()
{
string s;
cin>>s;
string ret;
for(int i=0;i<s.size();i++)
{
ret+=s[i];
if((s.size()-i-1)%3==0&&i!=s.size()-1) ret+=',';
}
cout<<ret;
return 0;
}
2.跳台阶 (pass)
跳台阶
线性dp
2.1 解析
2.2 代码
int jumpFloor(int number) {
//创建dp表
vector<int> dp(number+1);
//初始化
dp[0]=1,dp[1]=1;
//填表
for(int i=2;i<=number;i++)
dp[i]=dp[i-1]+dp[i-2];
return dp[number];
}
//优化:
int jumpFloor(int number) {
int a=1,b=1;
int c=1;
int count=2;
while(count<=number)
{
count++;
a=b;
b=c;
c=a+b;
}
return c;
}
3.扑克牌顺子 (pass)
扑克牌顺子
模拟
3.1 解析
3.2 代码
//方法一:模拟+排序
bool IsContinuous(vector<int>& nums) {
int count=0;//统计0的个数
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i]==0) count++;
else
{
if(nums[i+1]==nums[i]) return false;//出现重复
if(nums[i+1]-nums[i]-1>count) return false;//相差的数个数,小于0的个数
else
count-=nums[i+1]-nums[i]-1;
}
}
return true;
}
//方法二:规律
class Solution {
bool hash[14]={0};//统计是否出现过
public:
bool IsContinuous(vector<int>& nums) {
int maxval=0,minval=14;
for(auto& x:nums)
{
if(x)
{
if(hash[x]) return false;//出现重复
hash[x]=true;
maxval=max(x,maxval);
minval=min(x,minval);
}
}
return maxval-minval<=4;
}
};