Leetcode
Leetcode-1.两数之和
题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
int* twoSum(int* nums, int numsSize, int target, int* returnSize) { //两次循环找target for (int i = 0; i < numsSize - 1; i++) { for (int j = i + 1; j < numsSize; j++) { if (nums[i] + nums[j] == target) { //找到就开辟一个空间,存放i和j进去,最后返回去 int* arr = (int*)malloc(sizeof(int) * 2); *returnSize = 2; arr[0] = i; arr[1] = j; return arr; } } } //找不到 return 0; }
Leetcode-3. 无重复字符的最长子串
题目:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度
代码和注释:
int lengthOfLongestSubstring(char* s) { int len = strlen(s); //定义left和right从0开始遍历 int left = 0; int right = 0; //max记录最长字串的长度 int max = 0; //j用来遍历left到right之间有没有重复字符 int j = 0; //遍历字符串 for (int i = 0; i < len; i++) { //SameChar用来记录是否出现相同的字符,每次循环进来都要把它置0; //因为上一次循环中有可能把它赋成1 int SameChar = 0; //left和right相当于维护一段子字符串的长度 //每次right++完后,将left赋给j,即每次都从left开始遍历到right //若遇到重复的字符,将j的下一个位置赋给新的left,right再++,这样又开始遍历一段新的子字符串 for (j = left; j < right; j++) { if (s[j] == s[right]) { //遇到相同的字符 SameChar = 1; break; } } //遇到相同的字符 if (SameChar) { left = j + 1; } //判断最长字串的长度 if (max < right - left + 1) { max = right - left + 1; } right++; } return max; }
Leetcode-9.回文数
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是,-121也不是。
bool isPalindrome(int x) { if (x < 0) { return false; } int a = x; long long b = 0; //直接逆序整个数 while (a > 0) { b = b * 10 + a % 10; a /= 10; } //如果逆序的数等于原来的x,就符合题意 if (b == x) { return true; } else { return false; } }