数据结构经典算法题解

1.爬楼梯问题。假设你正在爬楼,需要n阶才能到达楼顶,每次你可以爬1或者2个台阶,你有多少种不同的方法可以爬到楼顶?注意:n为正整数。

define OK 1

define ERROR 0

/*
思路:递归思想
1.爬楼梯只能爬1个台阶或者2个台阶
2.假设有3个台阶,f(3) = f(1) + f(2) f(2) = f(1) + f(1) ,所以满足:f(n) = f(n-1) + f(n-2)
3.所以在问题设定上是满足递归思想的。
4.递归的出口是f(2)或者f(1)
*/
int ClimbStairs(int n) {

if (n<1) {
    return ERROR;
}
if (n==1) {
    return 1;
}

if (n==2) {
    return ClimbStairs(1)+ClimbStairs(1);
}

return ClimbStairs(n-1) + ClimbStairs(n-2);

}

/*
动态规划法:
*/
int ClimbStairs_1(int n) {

if (n<1) return ERROR;
if (n==1) return 1;
int tem = n+1;

//定义一个整形数组
int *sum = (int *)malloc(sizeof(int) * tem);
sum[0] = 0;
sum[1] = 1;
sum[2] = 2;

for (int i=3; i<=n; i++) {
    
    sum[i] = sum[i-1] + sum[i-2];
}
return sum[n];

}

2.有主串S="abcacabdc",模式串T="abc",请查找出模式串第一次出现的位置,提示:主串和模式串均为小写字母且是合法输入。
/// 子字符串在主字符串中第一个出现的位置 保证主字符串长度大于等于子字符串
/// @param main 主字符串
/// @param sub 子字符串
int subStringAtMainString_1(char *main ,char *sub){

//主串长度小于子串返回-1
if (strlen(main)

}

栈思想实现:

你可能感兴趣的:(数据结构经典算法题解)