Bootstrap

Day 6 翻转字符串和整数反转

给自己放了一周假感觉过了很长时间,说来有点惭愧,是时候继续学习下去了。还是继续按照每天两道题的速度将题目做下去。之前将初级算法电子书的数组部分题目做完,但是还没来得及复习,今天继续向后做字符串的题目。

翻转字符串

第一个题目是翻转字符串,是第344题,就是将字符串倒过来,要求空间复杂度为O(1),也就是说不能再定义一个新的数组将字符串翻转过来,但是可以定义一个变量用来交换字符串中的元素。而对于翻转字符串来说,可以定义两个变量,分别从头和尾同步遍历字符串,将所指示的对应位置元素调换,即可完成翻转字符串。这个循环的结束条件就是从头开始的指示变量大于从尾开始指示变量。

void reverseString(char* s, int sSize) {
    int temp;
    int left = 0, right = sSize-1;
    for(left = 0,right = sSize-1;left<right;left++,right--){
        temp = s[left];
        s[left] = s[right];
        s[right] = temp;
    }
}

整数反转

第二个题目是整数反转,是第7题,意思就是将输入的整数反过来,如果反过来的整数超过了32位有符号整数的表示范围,那么就输出0。要做的就是提取输入整数的每一位,然后将这提取出来的每一位都再重新装入一个新的变量。对于这个循环中需要检测的是如果再重新装入新提取出来的一位数之前,就已经即将超过32位有符号整数的表示范围,因为装入的操作需要将变量乘10再加上提取出来的变量,所以如果已经大于最大值/10或是小于最小值/10,都不满足条件,需要输出0。

int reverse(int x){
    int num = 0,result = 0;
    while (x != 0){
        if(result > INT_MAX/10||result < INT_MIN/10){
            return 0;
        }
        else{
            num = x%10;
            x = x/10;
            result = result*10 + num;
        }
    }
    return result;
}

虽然这两个题相对简单,但是因为还有其他事情要做,所以就先做两题,至少完成一下每天的目标吧。

;