文章目录
- 一、 编写函数实现字符串翻转
 - 二、轮转数组
 - 总结
 

一、 编写函数实现字符串翻转
描述
 编写一个函数,实现字符串的翻转
 输入描述:
 输入一个字符串
 输出描述:
 输出翻转后的字符串
 
 写法一:
 这种方法是定义begin和end,同时交换begin和end的值,交换完后begin++,end–,直到begin <= end为止就结束了
void Rote(int*nums,int numsSize )
{
    int begin = 0;
    int end = numsSize - 1;
    while (begin <= end)
    {
        int temp = nums[begin];
        nums[begin++] = nums[end];
        nums[end--] = temp;
    }
}
 
写法二:
 此方法思想与上面类似,就是写法不同
void reverse_string(int*nums,int numsSize)
{
    int len=numsSize;
    for(int i=0;i<len/2;i++)//对称交换
    {
        char temp=s[len-1-i];
        s[len-1-i]=s[i];
        s[i]=temp;
    }
}
 
写法三:
 上面两种方法是原地旋转,这种方法是异地转,就是建立一个数组,直接将数组从后面的数据直接放到另外的一个数组里面,然后直接复制过来,这种方法较为简单,代码我就不写了
二、轮转数组
189. 轮转数组
 
 其实如果你将上面的题吃通透后,这题你就基本会了,只是需要想到一个特殊的思想
 1.反转整个字符串
 2.反转区间为前k的子串
 3.反转区间为k到末尾的子串
 然后就可以了
 然后运用上面第一题的方法,这题就很好做了
 这里我只写第一种写法的方法
void fun(int *nums,int begin,int end)
{
    while(begin<=end)
    {
        int temp=nums[begin];
        nums[begin++]=nums[end];
        nums[end--]=temp;
    }
}
void rotate(int* nums, int numsSize, int k){
    k%=numsSize;
    fun(nums,0,numsSize-k-1);
    fun(nums,numsSize-k,numsSize-1);
    fun(nums,0,numsSize-1);
    for(int i=0;i<numsSize-1;i++)
    {
        printf("%d",nums[i]);
    }
}
 
总结
本篇文章篇幅较少,但只要将这两个题的思想掌握,翻转题基本就不会有什么问题了



















