CareerCup 150 (Cracking the Coding Interview)是由 Google 的前员工撰写的,一本针对程序员面试的攻略,其中囊括了许多 IT 巨头的面试流程。这本书的题目难度适中,不是很难,但是想要一次把代码写正确,却需要多多练习。
这本书盛名已久,我就不多介绍了,书中提供的解答是 Java 版本的,我自己喜欢用 C,所以在这里记录 C 语言版本的解答,希望和大家多多交流。
------------------------------- 1.2.c -----------------------
题目我就不在这里写了,网上到处都有的。
  1. /* This is one of the solution set to CareerCup 150 problems.

  2. *

  3. * Problem 1.2

  4. *

  5. * Method 1: Swap the nth and the (count-n)th elements.

  6. * Notice: Under gcc, char* can't be modified, we can only manipulate the char array.

  7. * Method 2: Use stack, first in, last out.

  8. *

  9. * Date: 02/18/2013

  10. * Compile command: gcc-4.7 1.2.c

  11. */

  12. #include <stdio.h>

  13. #include <string.h>

  14. #include <stdlib.h>

  15. void reverse(char str[]);   //O(n) time, O(1) space

  16. void reverseUseStack(char str[]);   //O(n) time, O(n) space

  17. int main(int argc, char *argv[])

  18. {

  19. char str[] = "1234abcd";

  20.    printf("Original string:\t%s\n",str);

  21. //reverse(str);

  22.    reverseUseStack(str);

  23.    printf("Reversed string:\t%s\n",str);

  24. return 0;

  25. }

  26. void reverse(char str[])

  27. {

  28. int len = strlen(str);

  29. int i = 0;

  30. int range = len - 1;

  31. for(; range > 0; i++)

  32.    {

  33. //loop 1:swap the first and the last element.

  34. char tmp = str[i];

  35.        str[i] = str[i + range];

  36.        str[i + range] = tmp;

  37.        range -= 2;

  38.    }

  39. }

  40. void reverseUseStack(char str[])

  41. {

  42. int len = strlen(str);

  43. char *strStack = malloc(len-1);

  44. int index = 0;

  45. for(len -= 1; len >=0; len--)

  46.        strStack[index++] = str[len];

  47.    strncpy(str, strStack, sizeof(str));

  48.    free(strStack);

  49.    strStack = NULL;

  50. }