001 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> myVector; map<int,int> myMap; for (int i =0;i<nums.size();i++){ if(myMap.find(target-nums[i])==myMap.end()) //没有找到,添加到map中;map自身有find方法。 { myMap[nums[i]]=i; }else{ myVector={myMap[target-nums[i]],i}; break; } } return myVector; } };
007 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
class Solution { public: int reverse(int x) { int z=0; while(x!=0) { if (z>INT_MAX/10 || z<INT_MIN/10) // 要注意溢出判断。 return 0; else{ z = z*10+x%10; x =x/ 10; } } return z; } };
009 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
class Solution { public: bool isPalindrome(int x) { if(x<0 || x>0&&x%10==0) return false; if(x>=0 && x<10) return true; //各种情况要考虑清楚 int y = 0; while(x>y) { y = y*10 + x%10; x = x/10; } if(x==y || x==y/10){ return true; } else{ return false; } } };
013 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 1:
输入: “III”
输出: 3
示例 2:
输入: “IV”
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
class Solution { public: int romanToInt(string s) { map<char,int> myMap={ {'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000}}; int x = 0; for (int i=0;i<s.length();i++) { if(i==s.length()-1 || myMap[s[i]]>=myMap[s[i+1]]) x += myMap[s[i]]; else x -= myMap[s[i]]; } return x; } };
014 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
class Solution { public: string longestCommonPrefix(vector<string>& strs) { if(strs.size()==0) { return ""; } if(strs.size()==1) { return strs[0]; } string result; string tmp = strs[0]; for (int i=1;i<strs.size();i++) { for(int j=0;j<min(tmp.length(),strs[i].length());j++) { if(tmp[j]==strs[i][j]) result+=tmp[j]; else break; } if(result=="") return ""; else tmp = result; result = ""; } return tmp; } };