前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日算法刷题Day12-跳台阶、排列、替换空格、求n累加

每日算法刷题Day12-跳台阶、排列、替换空格、求n累加

作者头像
timerring
发布2022-09-30 08:49:23
2370
发布2022-09-30 08:49:23
举报
文章被收录于专栏:TechBlog

文章目录

35.跳台阶

一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 0 级台阶走到第n 级台阶一共有多少种方案。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示方案数。

数据范围

1≤n≤15

输入样例:
代码语言:javascript
复制
5
输出样例:
代码语言:javascript
复制
8
思路

采用递归的思路

注意这一题是要统计方法数,即到达指定数字的次数。

因此设置ans变量传输结果。有了统计结果变量,可以分别按照题意遍历所有方法,最后输出结果即可。

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;

int n;
int ans = 0;

void foo( int k)
{
    if( k == n)ans++;
    else if(k < n)
    {
        foo(k+1);
        foo(k+2);
    }
}


int main()
{
    cin >>n;
    foo(0);
    cout << ans <<endl;
    return 0;
    
}

当然也可以采用斐波那契的方法

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;

int a[20];
int n;


int main()
{
    
    cin >>n;
    a[0] = 1;
    for( int i = 1; i <= n; i++)
    {
        a[i] = a[i-1] + a[i-2];
    }
    cout <<a[n];
    return 0;
    
}

36.排列

给定一个整数 n,将数字 1∼n= 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数 n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤9

输入样例:
代码语言:javascript
复制
3
输出样例:
代码语言:javascript
复制
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
思路

本题可以采用递归的思路完成。详解如下:

image-20220823101551898
image-20220823101551898

代码:

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;

int N = 10;
int n;

void dfs(int u, int num[], bool st[])
{
    if(u > n)
    {
        for(int i = 1; i <= n; i++)cout << num[i]<< " ";
        cout << endl;
    }
    else 
    {
        for(int i = 1; i <= n; i++)
            if (!st[i])
            {
                st[i] = true;
                num[u] = i;
                dfs( u +1 , num ,st);
                st[i] = false;//恢复现场
            }
    }
}


int main()
{
    int num[N];
    bool st[N] = {0};//定义状态变量
    cin >> n;
    dfs(1,num,st);//从1开始排列
    return 0;
    
}

37.替换空格

请实现一个函数,把字符串中的每个空格替换成"%20"

数据范围

0≤ 输入字符串的长度≤1000。 注意输出字符串的长度可能大于1000。

样例
代码语言:javascript
复制
输入:"We are happy."

输出:"We%20are%20happy."

思路

常规思路即可,注意这里由于加的是"%20",因此必须使用字符串拼接,不能单独替换char型变量。

代码语言:javascript
复制
class Solution {
public:
    string replaceSpaces(string &str) {
        string res;
        for(auto c : str)
        {
            if(c == ' ')res += "%20";
            else res += c;
        }
        return res;
    }
};

38.求1+2+…+n

求 1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 (A?B:C)。

数据范围

1≤n≤1000

样例
代码语言:javascript
复制
输入:10

输出:55
思路

还是采用递归的思路

代码语言:javascript
复制
class Solution {
public:
    int getSum(int n) {
        int sum = n;
        n > 0 && (sum += getSum(n - 1));
        return sum;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 35.跳台阶
    • 输入格式
      • 输出格式
        • 数据范围
          • 输入样例:
            • 输出样例:
              • 思路
              • 36.排列
                • 输入格式
                  • 输出格式
                    • 数据范围
                      • 输入样例:
                        • 输出样例:
                          • 思路
                          • 37.替换空格
                            • 数据范围
                              • 样例
                              • 38.求1+2+…+n
                                • 数据范围
                                  • 样例
                                    • 思路
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档