【剑指offer】——面试题精选2道 (替换空格)

导读:本篇文章讲解 【剑指offer】——面试题精选2道 (替换空格),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

 [编程题]替换空格

 [编程题]Fibonacci数列


 [编程题]替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

【剑指offer】——面试题精选2道 (替换空格)

接口类型编程题,只需要按照提示代码实现该功能;

思路如下:

首先计算出字符串中空格的个数,由空格个数确定字符串转换后的长度。

【剑指offer】——面试题精选2道 (替换空格)

每一个 空格 变成 %20就是 碰见一个空格字符串长度+2

该字符串有两个空格,所以字符串长度加4。为end2;

【剑指offer】——面试题精选2道 (替换空格)

 如果str[end1]!=’ ‘     那么str[end2]=str[end1]

如果str[end1] == ‘ ‘   那么str[end2–] = ‘0’;str[end2–] = ‘2’;str[end2–] = ‘%20’;end1–;

【剑指offer】——面试题精选2道 (替换空格)

代码如下: 

class Solution {
public:
    void replaceSpace(char* str, int length) {
        //数空格
        int space = 0;
        char* p = str;
        while (*p)
        {
            if (*p == ' ')
                space++;
            p++;
        }
        int newlen = length + space * 2;
        int end1 = length - 1;
        int end2 = newlen - 1;
        while (end1 != end2)
        {
            if (str[end1] != ' ')
            {
                str[end2--] = str[end1--];
            }
            else
            {
                str[end2--] = '0';
                str[end2--] = '2';
                str[end2--] = '%';
                end1--;

            }
        }
    }
};

 [编程题]Fibonacci数列

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

【剑指offer】——面试题精选2道 (替换空格)

给你一个数N求最少需要多少步可以变为Fibonacci数

分析如下:

【剑指offer】——面试题精选2道 (替换空格)

输入数字n,通过循环首先确定n是否属于斐波那契数列,如果属于打印0,意思是需要0步让n成为斐波那契数列;如果n不属于斐波那契数列,那么用n与b进行比较,如果b>n,对a到n和b到n的距离进行比较,也就是(a-n)和(b-n)的绝对值进行比较 ,如果a-n的绝对值大 则输出b-n的绝对值,反之相反。

【剑指offer】——面试题精选2道 (替换空格) 

 

#define _CRT_SECURE_NO_WARNINGS

//斐波那契数列 求最小步数
#include<stdio.h>
#include<math.h>

int main()
{
	int a = 0;
	int b = 1;
	int c = 1;
	int n = 0;
	scanf("%d", &n);
	while (1)
	{
		if (b == n) 
		{
			printf("0\n");
			break;
		}

		else if(b > n)
		{
			if (abs(a - n) > abs(b - n))
			{
				printf("%d", abs(b - n));

			}
			else
			{
				printf("%d", abs(a - n));

			}
			break;
		}
		a = b;
		b = c;
		c = a + b;
	}


	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119593.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!