【力扣】刷题,手写Java算法,每日一题,持续更新...

小编现在很迷恋刷算法题,就像当初迷恋做数独游戏一样,有种回到高中做数学题的感觉,很爽。

本篇,主要是把自己发表过的算法题做一个总结,一篇概括,所以会持续更新,敬请期待!

不要在意标题啦,主要是为了更醒目一些,可以增加访问量嘛 。~~(*^▽^*) ~~

一、简单:

题1. 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转,

如:输入: 123,输出: 321;输入: -123,输出: -321;输入: 110,输出: 11;

注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题思路:运算符最优原则,使用取余的方式去反转,对溢出的情况做异常判断,直接返回0。

代码:

class Solution {public int reverse(int x) {long res = 0;while(x != 0){res = res*10 + x%10;x /= 10;}return (resInteger.MAX_VALUE) ? 0 : (int)res;}
}

题2. 实现函数 ToLowerCase()功能,将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

如:输入: “Hello world”,输出: “hello world” ;

解题思路:用位运算的技巧,ASCII码表中大写的A是65,小写的a是97,它们的差是32。所以,有 65 | 32 转为二进制(按8位来算)可以得到 0100 0001 | 0010 0000 = 0110 0001 = 97 = a;

代码:

class Solution {public String toLowerCase(String str) {if (str == null && "".equals(str)) {return null;}StringBuilder sb = new StringBuilder();for(char i : str.toCharArray()){sb.append(i |= 32);}return sb.toString();}
}

扩展:

①. 大写变小写、小写变大写:字符 ^= 32;

②. 大写变小写、小写变小写:字符 |= 32;

③. 小写变大写、大写变大写:字符 &= -33;

题3. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

如:给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]。

解题思路:此题不考虑运算速度的话,使用冒泡排序最为直观简洁,全当复习冒泡了吧。

代码:

class Solution {public int[] twoSum(int[] nums, int target) {int[] indexs = new int[2];for(int i = 0; i < nums.length; i++){for(int j = nums.length - 1; j > i; j --){if(nums[i] + nums[j] == target){indexs[0] = i;indexs[1] = j; return indexs;}}}return indexs;}
}

题4. 颠倒给定的 32 位无符号整数的二进制位。

 如:输入: 00000010100101000001111010011100,输出: 00111001011110000010100101000000

解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。

解题思路:直接使用Integer包装类的 reverse(n) 方法,底层实现可以去看源码,同样是运算符最优原则。

代码:

public class Solution {public int reverseBits(int n) {return Integer.reverse(n);}
}

二、中等:

题1. 给定一个单词,你需要判断单词的大写使用是否正确。满足全部大写、全部小写、首字母大写返回true,否则返回false

 如:输入: “JIMMY”,输出: true;输入: “jimmy”,输出: true;输入: “Jimmy”,输出: true;输入: “JimmY”,输出: false;

解题思路:Java只有转大写和转小写,并没有像Python的title()方法,所以我们定义了一个正则表达式,速度还可以。

class Solution {public boolean detectCapitalUse(String word) {if(word.equals(word.toUpperCase())){return true;}if(word.equals(word.toLowerCase())){return true;} return word.matches("^[A-Z]{1}[a-z]{0,}");}
}

三、困难:

 

少侠请留步 ... ヾ(◍°∇°◍)ノ゙ ... 
欢迎点赞、评论、加关注,让更多人看到学到赚到
更多精彩,请关注我的"今日头条号":Java云笔记


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部