535. TinyURL 的加密与解密
这题其实是很常见的一个开发场景,短地址的开发。我这里只是分享一种md5的方式,还有其他的生成字符串比较短的hash方式。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
public class Codec {
private HashMap<String, String> map = new HashMap<>();
// Encodes a URL to a shortened URL.
public String encode(String longUrl) {
String md5 = crypt(longUrl);
String url = "http://tinyurl.com/" + md5;
map.put(url, longUrl);
return url;
}
// Decodes a shortened URL to its original URL.
public String decode(String shortUrl) {
return map.get(shortUrl);
}
public String crypt(String str) {
if (str == null || str.length() == 0) {
throw new IllegalArgumentException("String to encript cannot be null or zero length");
}
StringBuffer hexString = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] hash = md.digest();
for (int i = 0; i < hash.length; i++) {
if ((0xff & hash[i]) < 0x10) {
hexString.append("0" + Integer.toHexString((0xFF & hash[i])));
} else {
hexString.append(Integer.toHexString(0xFF & hash[i]));
}
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return hexString.toString();
}
public static void main(String[] args) {
String url = "https://leetcode.com/problems/design-tinyurl";
Codec codec = new Codec();
System.out.println(codec.decode(codec.encode(url)));
}
}
728. 自除数
import java.util.LinkedList;
import java.util.List;
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> ret = new LinkedList<>();
for(int i=left;i<=right;i++) {
if(isSelfDividing(i)) {
ret.add(i);
}
}
return ret;
}
public boolean isSelfDividing(int n) {
char[] chars = (n+"").toCharArray();
for(char c :chars) {
int cInt = c-'0';
if(cInt ==0 ) {
return false;
}
if(n%cInt!=0) {
return false;
}
}
return true;
}
}
507. 完美数
public class Solution507 {
public boolean checkPerfectNumber(int num) {
int sum = 1;
for(int i=2;i<=Math.sqrt(num);i++) {
int num1,num2=0;
if(num%i==0) {
num1=i;
num2=num/num1;
if(num1!=num2) {
sum+=num1+num2;
}else {
sum = num1;
}
}
}
if (num ==sum && num!=1) {
return true;
}else {
return false;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution507 s = new Solution507();
System.err.println(s.checkPerfectNumber(1));
System.err.println(s.checkPerfectNumber(2));
System.err.println(s.checkPerfectNumber(4));
System.err.println(s.checkPerfectNumber(28));
}
}
633. 平方数之和
class Solution {
public boolean judgeSquareSum(int c) {
for(int i=0;i<=Math.sqrt(c);i++) {
int lastNums = c -i*i;
int last = (int) Math.sqrt(lastNums) ;
if(last*last == lastNums) {
return true;
}
}
return false;
}
}