小言_互联网的博客

力扣(LeetCode)刷题,简单题(第1期)

340人阅读  评论(0)

目录

第1题:两数之和

第2题:整数反转

第3题:判断回字文

第4题:罗马数字转整数

第5题:最长公共前缀

第6题:判断字符串有效括号

第7题:将两个有序链表合并

第8题:删除重复元素

第9题:移除元素

第10题:实现 strStr() 函数


开启2020年学习新征程,力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

第1题:两数之和

试题要求如下:

回答(C语言):


  
  1. int* twoSum(int* nums, int numsSize, int target, int* returnSize){
  2. int* res = ( int *) malloc( sizeof( int) * 2);
  3. for( int i = 0; i < numsSize -1; i++) {
  4. for( int j = i + 1; j < numsSize; j++) {
  5. if(nums[i] + nums [j] == target) {
  6. res[ 0] = i;
  7. res[ 1] = j;
  8. *returnSize = 2;
  9. return res;
  10. }
  11. }
  12. }
  13. *returnSize = 0;
  14. return res;
  15. }

第2题:整数反转

试题要求如下:

 回答(C语言):


  
  1. int reverse(int x){
  2. long num = 0;
  3. while (x != 0) {
  4. num = num * 10 + x % 10;
  5. x = x / 10;
  6. }
  7. return (num> 2147483647 || num< -2147483648) ? 0 : num;
  8. }

第3题:判断回字文

试题要求如下:

回答(C语言): 


  
  1. bool isPalindrome(int x){
  2. int num1= 0;
  3. long num2= 0;
  4. num1=x;
  5. while(num1> 0){
  6. num2=num2* 10+num1% 10;
  7. num1/= 10;
  8. }
  9. if(num2==x)
  10. return 1;
  11. else
  12. return 0;
  13. }

第4题:罗马数字转整数

试题要求如下:

 回答(C语言): 


  
  1. int charToInt(char c)
  2. {
  3. char strArray[ 7] = { 'I', 'V', 'X', 'L', 'C', 'D', 'M'};
  4. int intArray[ 7] = { 1, 5, 10, 50, 100, 500, 1000};
  5. for( int i = 0; i < 7; i++)
  6. {
  7. if(strArray[i] == c)
  8. {
  9. return intArray[i];
  10. }
  11. }
  12. return 0;
  13. }
  14. int romanToInt(char * s)
  15. {
  16. int len = strlen(s);
  17. int v = 0;
  18. int c,n;
  19. for( int i = 0; i < len - 1 ; i++)
  20. {
  21. c = charToInt(s[i]);
  22. n = charToInt(s[i + 1]);
  23. v = (c < n) ? v - c : v + c;
  24. }
  25. v += charToInt(s[len - 1]);
  26. return v;
  27. }

第5题:最长公共前缀

试题要求如下:

 回答(C语言): 


  
  1. char * longestCommonPrefix(char ** strs, int strsSize)
  2. {
  3. if(strsSize== 0)
  4. return "";
  5. if(strsSize== 1)
  6. return strs[ 0];
  7. int i= 0,j= 0;
  8. while( 1)
  9. {
  10. if(strs[i][j]== '\0')
  11. break;
  12. if(strs[i][j]==strs[++i][j]) {
  13. if(i==strsSize -1)
  14. {
  15. j++;
  16. i= 0;
  17. }
  18. }
  19. else
  20. break;
  21. }
  22. char* res=( char*) malloc(j+ 1);
  23. res= memset(res, 0,j+ 1);
  24. res= strncpy(res,strs[ 0],j);
  25. return res;
  26. }

第6题:判断字符串有效括号

试题要求如下:

  回答(C语言): 


  
  1. bool isValid(char * s){
  2. int top = 0;
  3. char * stack = ( char*) malloc( strlen(s));
  4. if (s== NULL || strlen(s)<= 0) return true;
  5. for ( int i = 0; i< strlen(s); i++){
  6. if(s[i]== '(' || s[i]== '{' || s[i]== '['){
  7. stack[top++] = s[i];
  8. } else{
  9. if(--top < 0) return false;
  10. if(s[i]== ')' && stack[top] != '(') return false;
  11. if(s[i]== '}' && stack[top] != '{') return false;
  12. if(s[i]== ']' && stack[top] != '[') return false;
  13. }
  14. }
  15. if (top > 0) return false;
  16. return true;
  17. }

第7题:将两个有序链表合并

试题要求如下:

回答(C语言): 


  
  1. struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
  2. if(l1== NULL)
  3. return l2;
  4. if(l2== NULL)
  5. return l1;
  6. if(l1->val < l2->val){
  7. l1->next = mergeTwoLists(l1->next,l2);
  8. return l1;
  9. } else{
  10. l2->next = mergeTwoLists(l1,l2->next);
  11. return l2;
  12. }
  13. }

第8题:删除重复元素

试题要求如下:

回答(C语言): 


  
  1. int removeDuplicates(int* nums, int numsSize){
  2. int j= 0;
  3. if(nums== NULL || numsSize<= 0)
  4. return 0;
  5. for( int i= 0;i<numsSize -1;i++){
  6. if(nums[i]!=nums[i+ 1])
  7. {
  8. nums[j++]=nums[i];
  9. }
  10. }
  11. nums[j]=nums[numsSize -1];
  12. return j+ 1;
  13. }

第9题:移除元素

试题要求如下:

 回答(C语言): 


  
  1. int removeElement(int* nums, int numsSize, int val){
  2. int cou= 0;
  3. if(nums== NULL || numsSize<= 0)
  4. return 0;
  5. for( int i= 0;i<numsSize;){
  6. if(nums[i]==val){
  7. cou++;
  8. if(i==numsSize-cou)
  9. break;
  10. for( int j=i,k=i+ 1;j<numsSize-cou;j++,k++)
  11. nums[j]=nums[k];
  12. }
  13. else
  14. {
  15. i++;
  16. }
  17. }
  18. return numsSize-cou;
  19. }

第10题:实现 strStr() 函数

试题要求如下:

  回答(C语言): 


  
  1. int strStr(char * haystack, char * needle){
  2. int i= 0,j= 0,k= 0;
  3. while(haystack[i]&&needle[j])
  4. {
  5. if(haystack[i]==needle[j])
  6. {
  7. i++;
  8. j++;
  9. }
  10. else
  11. {
  12. k++;
  13. i=k;
  14. j= 0;
  15. }
  16. }
  17. if(needle[j]== '\0')
  18. return k;
  19. return -1;
  20. }

 


转载:https://blog.csdn.net/m0_38106923/article/details/104101573
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场