以下两个小问题是我在http://blog.csdn.net/xuxian361/article/details/49204169看到的,使用了不同的实现方法;有兴趣可以比较着看一下;
一: 给定一个由0-9纯数字组成的字符串,假设字符串的向量是由所有数字的乘积组成,字符串的标量是由所有数字的累加和组成。比如”12340”的向量是1*2*3*4*0=0,标量是1+2+3+4+0=10;”456”的向量是4*5*6=120,标量是4+5+6=15; 现给定一个字符串数组,请按字符串的向量降序排序,如果向量一样大,则按标量降序排序,如果还一样大则保持原来的顺序。
* 测试样例1:输入是{“1230”, “304”}, 程序输出{“304”, “1230”};
* 测试样例2:输入是{“38”, “46”, “47”}, 程序输出{“47”, “38”, “46};
实现代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class AboutSort {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
String[] str = new String[]{"38","46","47"};
for(String ele: str) list.add(ele);
list.sort((String o1, String o2)-> {
if(toVector(o1)<toVector(o2)) return 1;
else if(toSum(o1)<toSum(o2)) return 1;
else return -1;
});
System.out.println(list);
}
private static int toVector(String str){
char[] chr = str.toCharArray();
int result=0;
int product=1;
for(int i=0;i<chr.length;i++){
result = Character.getNumericValue(chr[i]);
product=product*result;
}
System.out.println(str+" "+product);
return product;
}
private static int toSum(String str){
char[] chr = str.toCharArray();
int result=0;
for(int i=0;i<chr.length;i++){
result =result + Character.getNumericValue(chr[i]);
}
System.out.println(str+" "+result);
return result;
}
}
在实际的使用中不建议使用静态方法;
二:消息加密问题。给定一个长度为N字符串Msg,为了方便在网上传输而不被人截获,用一个长度为N的整数数组Key去加密,加密过程如下:Msg中第i(从0开始计数)个字符新的位置应该是Key[i]。同时给定一个整数count,表示整个加密将持续count次。求加密过后的字符串。
测试用例:
1)
"abcde"
{4, 3, 2,1, 0}
1
Returns:"edcba"
2)
"abcde"
{4, 3, 2,1, 0}
2
Returns:"abcde"
实现代码:
public class Encryption {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public String ecrypts(int[]key,int count){
while(count>0){
char[] chrs=str.toCharArray();
StringBuilder strs =new StringBuilder("");
for(int i=0;i<key.length;i++) strs.append(chrs[key[i]]);
str=strs.toString();
count--;
}
return str;
}
public static void main(String[] args){
Encryption ecrpt = new Encryption();
ecrpt.setStr("crf1205");
int[] key = new int[]{6,5,4,3,2,1,0};
int count =3;
ecrpt.ecrypts(key, count);
System.out.println(ecrpt.getStr());
}
}