leetcode 简单题合集(Java版)
326. 3的冪
https://leetcode-cn.com/problems/power-of-three/
題解:
class Solution {public boolean isPowerOfThree(int n) {if (n == 0) return false;while (n != 1) {if (n % 3 != 0) return false;else n /= 3;}return true;} }327. 4的冪
https://leetcode-cn.com/problems/power-of-four/
題解:
class Solution {public boolean isPowerOfFour(int n) {if (n == 0) return false;while (n != 1) {if (n % 4 != 0) return false;else n /= 4;}return true;} }344. 反轉字符串
https://leetcode-cn.com/problems/reverse-string/
class Solution {public void reverseString(char[] s) {for (int i = 0; i < s.length / 2; i++) {char t = s[i];s[i] = s[s.length - i - 1];s[s.length - i - 1] = t;}} }345. 反轉字符串中的元音字母
https://leetcode-cn.com/problems/reverse-vowels-of-a-string/
class Solution {public static void main(String[] args) {reverseVowels("hello");}public static String reverseVowels(String s) {char[] arr = s.toCharArray();int left = 0, right = arr.length - 1;while (left < right) {while (left < arr.length && !isVowel(arr[left])) {left++;}while (right >= 0 && !isVowel(arr[right])) {right--;}if (left >= right) break;char temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}StringBuilder sb = new StringBuilder();for (int i = 0; i < arr.length; i++) {sb.append(arr[i]);}return sb.toString();}public static boolean isVowel(char c) {return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');} }349. 兩個數組的交集
https://leetcode-cn.com/problems/intersection-of-two-arrays/
public class Solution {public int[] intersection(int[] nums1, int[] nums2) {HashSet<Integer> set = new HashSet<>();ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < nums1.length; i++) {set.add(nums1[i]);}for (int i = 0; i < nums2.length; i++) {if (set.remove(nums2[i])) {list.add(nums2[i]);}}int[] res = new int[list.size()];for (int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;} }350. 兩個數組的交集 II
https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/comments/
思路:HashMap存原始個數,遇到相同就減1并輸出
class Solution {public int[] intersect(int[] nums1, int[] nums2) {HashMap<Integer, Integer> map = new HashMap();ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < nums1.length; i++) {Integer cnt = map.get(nums1[i]);cnt = cnt == null ? 0 : cnt;map.put(nums1[i], cnt + 1);}for (int i = 0; i < nums2.length; i++) {if (map.containsKey(nums2[i])) {int cnt = map.get(nums2[i]);if (cnt > 1) {map.put(nums2[i], cnt - 1);} else {map.remove(nums2[i]);}list.add(nums2[i]);}}int[] res = new int[list.size()];for (int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;} }367. 有效的完全平方數
https://leetcode-cn.com/problems/valid-perfect-square/
二分查找,中規中矩
class Solution {public boolean isPerfectSquare(int num) {int min = 0, max = 46340;return binSearch(min, max, num);}public boolean binSearch(int min, int max, int num) {int mid = (min + max) / 2;if (min * min == num || mid * mid == num || max * max == num) {return true;}if (min >= max) return false;if (num < mid * mid) {return binSearch(min, mid, num);} else {return binSearch(mid + 1, max, num);}} }374. 猜數字大小
https://leetcode-cn.com/problems/guess-number-higher-or-lower/
本題是經典的二分查找題
注意 int mid = begin +(end - begin)/2; 不要用int mid = (end + begin)/2; 會越界
public class Solution extends GuessGame {public int guessNumber(int n) {return binSearch(1, n);}public int binSearch(int left, int right) {int mid = left + (right - left) / 2;int flag = guess(mid);if (flag == 0) return mid;else if (flag < 0) return binSearch(left, mid - 1);else return binSearch(mid + 1, right);} }383. 贖金信
https://leetcode-cn.com/problems/ransom-note/
解法1:適用于兩個字串所包含字符不受任何限制的情況
class Solution {public boolean canConstruct(String ransomNote, String magazine) {char[] c1 = ransomNote.toCharArray();char[] c2 = magazine.toCharArray();HashMap<Character, Integer> map = new HashMap<>();for (int i = 0; i < c2.length; i++) {Integer cnt = map.get(c2[i]);cnt = cnt == null ? 0 : cnt;map.put(c2[i], cnt + 1);}for (int i = 0; i < c1.length; i++) {if (map.containsKey(c1[i])) {int cnt = map.get(c1[i]);if (cnt > 1) {map.put(c1[i], cnt - 1);} else {map.remove(c1[i]);}} else {return false;}}return true;} }解法2:由于本題只有小寫字母,所以根據這個特性,可以用數組代替 hashmap
class Solution {public boolean canConstruct(String ransomNote, String magazine) {char[] chars1 = ransomNote.toCharArray();char[] chars2 = magazine.toCharArray();if (chars1.length > chars2.length) {return false;}int[] rans = new int[26];for (char c : chars1) {rans[c - 'a']++;}for (char c : chars2) {rans[c - 'a']--;}for (int i = 0; i < rans.length; i++) {if (rans[i] > 0) {return false;}}return true;} }387. 字符串中的第一個唯一字符
https://leetcode-cn.com/problems/first-unique-character-in-a-string/
class Solution {public int firstUniqChar(String s) {int[] chars = new int[26];for (int i = 0; i < s.length(); i++) {chars[s.charAt(i) - 'a']++;}for (int i = 0; i < s.length(); i++) {if (chars[s.charAt(i) - 'a'] == 1) {return i;}}return -1;} }評論區有人說,可以建立一個索引表記錄首次出現的位置,就不用遍歷兩次字符串了。
389. 找不同
https://leetcode-cn.com/problems/find-the-difference/
按位異或
class Solution {public char findTheDifference(String s, String t) {char res = 0;char[] c1 = s.toCharArray();char[] c2 = t.toCharArray();for (char c : c1) {res = (char) (res ^ c);}for (char c : c2) {res = (char) (res ^ c);}return res;} }392. 判斷子序列
https://leetcode-cn.com/problems/is-subsequence/
雙指針,最后如果 p1 走到末尾,即可說明是子序列
401. 二進制手表
https://leetcode-cn.com/problems/binary-watch/
逆向思考:遍歷所有的時間,留下相加和為num的
class Solution {public List<String> readBinaryWatch(int num) {List<String> resList = new ArrayList<>();for (int i = 0; i < 12; ++i)for (int j = 0; j < 60; ++j)if (Integer.bitCount((i << 6) | j) == num)resList.add(i + ":" + (j > 9 ? "" : "0") + j);return resList;} }404. 左葉子之和
https://leetcode-cn.com/problems/sum-of-left-leaves/
二叉樹問題,遞歸
class Solution {public int sumOfLeftLeaves(TreeNode root) {return sumLeft(root, false);}public int sumLeft(TreeNode node, boolean isLeft) {if (node == null) return 0;// 是葉子且在左邊if (node.left == null && node.right == null && isLeft) {return node.val + sumLeft(node.right, false);}// 不是葉子或不在左邊return sumLeft(node.left, true) + sumLeft(node.right, false);} }405. 數字轉換為十六進制數
https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/
class Solution {public String toHex(int num) {int base = 16;// list 存儲進制轉換后的每一位List<Integer> list = new ArrayList<Integer>();long longNum;// 將負的 num 處理為補碼對應的數if (num == 0) {return "0";} else if (num < 0) {longNum = 2L * Integer.MAX_VALUE + num + 2;} else {longNum = num;}// 經過上面的轉化,此時正負可以統一處理while (longNum != 0) {int t = (int) (longNum % base);list.add(0, t);longNum /= base;}// 轉換成字符串StringBuilder sb = new StringBuilder();for (int n : list) {if (n > 9) sb.append((char) (n + 'a' - 10));else sb.append(n);}return sb.toString();} }409. 最長回文串
別人那天并不是統計最長回文串,而是可以讓字母重新組合!
思路:統計每個字母出現的次數,想象一個對稱軸,偶數次可以放在對稱軸兩側,奇數次只能作為對稱軸,所以最終只能有一個出現奇數次數字母放在對稱軸上。
class Solution {public int longestPalindrome(String s) {char[] cc = new char[122 - 65 + 1];char[] ss = s.toCharArray();for (char c : ss) {cc[c - 'A']++;}int total = 0;boolean hasSingle = false;for (char c : cc) {if (c % 2 == 1) hasSingle = true;total += c / 2;}total *= 2;if (hasSingle) total += 1;return total;} }412. Fizz Buzz
https://leetcode-cn.com/problems/fizz-buzz/
堪稱最簡單的一道題
class Solution {public List<String> fizzBuzz(int n) {List<String> list = new ArrayList();for(int i=1;i<=n;i++){if(i%3==0&&i%5==0)list.add("FizzBuzz");else if(i%3==0)list.add("Fizz");else if(i%5==0)list.add("Buzz");else list.add(""+i);}return list;} }414. 第三大的數
https://leetcode-cn.com/problems/third-maximum-number/
class Solution {public int thirdMax(int[] nums) {int flag1,flag2,flag3;long max1,max2,max3;flag1=flag2=flag3=0;max1=max2=max3=Long.MIN_VALUE;for(int i:nums){if((long)i>max1){max1=(long)i;flag1=1;}}for(int i:nums){if((long)i>max2&&(long)i<max1){max2=(long)i;flag2=1;}}for(int i:nums){if((long)i>max3&&(long)i<max2){max3=(long)i;flag3=1;}}if(flag1+flag2+flag3==3)return (int)max3;return (int)max1;} }超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的leetcode 简单题合集(Java版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 303. 区域和检索
- 下一篇: java美元兑换,(Java实现) 美元