日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

力扣刷题01

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣刷题01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單版

  • 1. 兩數求和
  • 2. 回文數
  • 3. 將整數倒轉
  • 4. 羅馬轉整數

1. 兩數求和

我用的暴力求和。

package top.bitqian.easy.two_sum;import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map;/*** 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 的那 兩個 整數,并返回它們的數組下標。* <p>* 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。* <p>* 你可以按任意順序返回答案。** @author echo lovely* @date 2021/3/8 16:45*/public class DemoSum {/**輸入:nums = [2,7,11,15], target = 9輸出:[0,1]解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。** */static int[] twoSum(int[] nums, int target) {int len = nums.length;for (int i = 0; i < len; i++) {int curVal = nums[i];// tips: 可以從 i + 1開始的for (int j = 0; j < len; j++) {boolean b = curVal + nums[j] == target && i != j;if (b) {return new int[]{i, j};}}}return new int[0];}public static int[] upgrade(int[] nums, int target) {Map<Integer, Integer> hashtable = new LinkedHashMap<>();for (int i = 0; i < nums.length; ++i) {if (hashtable.containsKey(target - nums[i])) {return new int[]{hashtable.get(target - nums[i]), i};}hashtable.put(nums[i], i);}return new int[0];}public static void main(String[] args) {int[] sum = twoSum(new int[]{2, 3, 10, 9, 7}, 19);System.out.println(Arrays.toString(sum));sum = twoSum(new int[]{3, 2, 4}, 6);System.out.println(Arrays.toString(sum));sum = upgrade(new int[]{2, 3, 10, 9, 7}, 12);System.out.println(Arrays.toString(sum));System.out.println("\n");sum = new int[]{1, 2, 3, 4};for (int i = 0; i < sum.length; ++i) {System.out.println(i);}}}

2. 回文數

針對于數字xxxx, 正序和反序都是一樣的,稱之為回文數。
使用數據結構棧解題,棧是先進后去,可以彈出來,得到相反的數,字符串比較就行了。

package top.bitqian.easy.palindrome;import java.util.Stack;/*** @author echo lovely* @date 2021/11/8 14:52* @description 回文數* https://leetcode-cn.com/problems/palindrome-number/*/public class Palindrome {public static void main(String[] args) {boolean b = isPalindrome(19091);System.out.println(b);System.out.println(upgrade(0));}// 使用棧解題public static boolean isPalindrome(int x) {if (x < 0) {return false;}String str = String.valueOf(x);Stack<String> stack = new Stack<>();for (String s : str.split("")) {stack.push(s);}String newStr = "";for (int i = stack.size() - 1; i >= 0; i--) {newStr = newStr.concat(stack.pop());}return newStr.equals(str);}/*** https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode-solution/*/public static boolean upgrade(int x) {// 特殊情況:// 如上所述,當 x < 0 時,x 不是回文數。// 同樣地,如果數字的最后一位是 0,為了使該數字為回文,// 則其第一位數字也應該是 0// 只有 0 滿足這一屬性if (x < 0 || (x % 10 == 0 && x != 0)) {return false;}int revertedNumber = 0;while (x > revertedNumber) {revertedNumber = revertedNumber * 10 + x % 10;x /= 10;}// 當數字長度為奇數時,我們可以通過 revertedNumber/10 去除處于中位的數字。// 例如,當輸入為 12321 時,在 while 循環的末尾我們可以得到 x = 12,revertedNumber = 123,// 由于處于中位的數字不影響回文(它總是與自己相等),所以我們可以簡單地將其去除。return x == revertedNumber || x == revertedNumber / 10;}}

3. 將整數倒轉

注意整數有最大值和最小值!!!, 越界報錯,用Long比較。
這里也是利用棧解決。

package top.bitqian.easy.reverse_integer;import java.util.Stack;/*** @author echo lovely* @date 2021/11/8 11:36* @description 兩數反轉* https://leetcode-cn.com/problems/reverse-integer/* 1. Integer.MIN_VALUE的絕對值不靠譜* 2. Integer.parseInt("9646324351") 轉換過大數字, 可能出現異常*/public class ReverseInteger {public static void main(String[] args) {// the min value of integer, if you get a abs, it's will be a negative num..int val = -2147483648;int res = reverse(1534236469);System.out.println(res);// 結果是負數..System.out.println(-val);System.out.println(Math.abs((long) val));res = upgrade(val);System.out.println(res);}// 使用棧進行反轉public static int reverse(int x) {if (x == 0)return x;if (x <= Integer.MIN_VALUE || x >= Integer.MAX_VALUE) {return 0;}String s = String.valueOf(Math.abs(x));Stack<String> stack = new Stack<>();for (String ele : s.split("")) {stack.push(ele);}s = "";for (int i = stack.size() - 1; i >= 0; i--) {s = s.concat(stack.pop());}// 關于證數轉換問題, 如果數字超出整數范圍, 會報轉換錯誤異常。// Integer.valueOf("9646324351");// Exception in thread "main" java.lang.NumberFormatException: For input string: "9646324351"long tmp = Long.parseLong(s);boolean flag = tmp > Integer.MAX_VALUE || tmp < Integer.MIN_VALUE;if (flag) {return 0;}if (x > 0) {x = Integer.parseInt(s);return x;}x = Integer.parseInt(s);return -x;}/*** https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode-solution-bccn/*/public static int upgrade(int x) {int rev = 0;while (x != 0) {if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {return 0;}int digit = x % 10;x /= 10;rev = rev * 10 + digit;}return rev;}}

4. 羅馬轉整數

  • 利用字典map存儲,羅馬和數字一一對應。
  • 求出特殊的羅馬數字組合,比如IV, 要用減法, IV是4
  • 求加法的羅馬數字,VI,就是6
  • package top.bitqian.easy.roman_to_integer;import java.util.HashMap; import java.util.Map;/*** @author echo lovely* @date 2021/11/8 15:07* @description https://leetcode-cn.com/problems/roman-to-integer/*/public class RomanToInteger {public static void main(String[] args) {System.out.println(romanToInt("IV"));System.out.println(upgrade("XIV"));/*I 1V 5X 10L 50C 100D 500M 1000rules:I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。*/}static Map<String, Integer> paramMap = new HashMap<>();static {paramMap.put("I", 1);paramMap.put("V", 5);paramMap.put("X", 10);paramMap.put("L", 50);paramMap.put("C", 100);paramMap.put("D", 500);paramMap.put("M", 1000);}public static int romanToInt(String s) {int res = 0;String[] specArr = new String[]{"IV", "IX", "XL", "XC", "CD", "CM"};// 1. 計算指定的字符for (String ele : specArr) {if (s.contains(ele)) {res += getVal(ele);s = s.replace(ele, "");}}// 2. 計算正常相加的字符for (String ele : s.split("")) {// IV, 防止s是""if ("".equals(ele))return res;Integer val = paramMap.get(ele);res += val;}return res;}private static int getVal(String ele) {int val = 0;String[] node = ele.split("");for (String tmp : node) {Integer i = paramMap.getOrDefault(tmp, 0);val = Math.abs(val - i);}return val;}/*https://leetcode-cn.com/problems/roman-to-integer/solution/luo-ma-shu-zi-zhuan-zheng-shu-by-leetcod-w55p/*/public static int upgrade(String s) {int ans = 0;int n = s.length();for (int i = 0; i < n; ++i) {int value = symbolValues.get(s.charAt(i));if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {ans -= value;} else {ans += value;}}return ans;}static Map<Character, Integer> symbolValues = new HashMap<Character, Integer>() {private static final long serialVersionUID = 4834716094584504863L;{put('I', 1);put('V', 5);put('X', 10);put('L', 50);put('C', 100);put('D', 500);put('M', 1000);}};}

    總結

    以上是生活随笔為你收集整理的力扣刷题01的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。