1.7---将矩阵元素为0的行列清零0(CC150)
public static int[][] clearZero(int[][] matrix, int n){
int high = matrix.length;
int wide = matrix.length;
if(high == 0) return matrix;
List<Integer> listRow = new ArrayList();
List<Integer> listCol = new ArrayList();
for(int i = 0; i < wide; i++){
for(int j = 0; j < high; j++){
if(matrix[i][j] == 0){
listRow.add(i);
listCol.add(j);
}
}
}
for(int tmp : listRow){
for(int j = 0; j < high; j++){
matrix[tmp][j] = 0;
}
}
for(int tmp : listCol){
for(int i = 0; i < wide; i++){
matrix[i][tmp] = 0;
}
}
return matrix;
}
1.8---字符串是否是旋转而成(CC150)
public class Solution{
public static void main(String[] args){
System.out.println(isRotation("abc","abc"));
}
public static boolean isSubstring(String str1,String str2){
if(str1.contains(str2) || str2.contains(str1)) return true;
return false;
}
public static boolean isRotation(String str1,String str2){
if(str1.length() != str2.length()) return false;
String sum = str1 + str1;
return isSubstring(sum,str2);
}
}
1.1---判断字符串是否所有字符都不相同(CC150)
public boolean checkDifferent(String str) {
// write code here
for(int i = 0; i < str.length(); i++){
for(int j = i + 1; j < str.length(); j++){
if(str.charAt(i) == str.charAt(j)) return false;
}
}
return true;
}
1.2---翻转字符串(CC150)
public String reverseString(String iniString) {
// write code here
StringBuffer tmp = new StringBuffer(iniString);
tmp = tmp.reverse();
return tmp.toString();
}
1.3---字符串重新排列后是否能够变成另一个字符串(CC150)
public boolean checkSam(String str1, String str2) { // write code here if(str1.length() != str2.length()) return false; StringBuffer sb1 = new StringBuffer(str1); StringBuffer sb2 = new StringBuffer(str2); for(int i = 0; i < str1.length(); i++){ int tmp = sb2.indexOf(sb1.substring(i, i+1)); if(tmp == -1) return false; sb2.deleteCharAt(tmp); } if(sb2.length() == 0) return true; return false; }
1.4---字符串空格变成20%(CC150)
public class Main5 {
public static void replaceSpaces(char[] str, int length, int spaceCount) {
int index, i = 0;
index = length + spaceCount * 2;
str[index] = '\0';
for (i = length - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[index - 1] = '%';
str[index - 2] = '0';
str[index - 3] = '2';
index = index - 3;
} else {
str[index - 1] = str[i];
index--;
}
}
}
public static void main(String[] args) {
String str = "abc d e f";
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count++;
}
}
char[] arr = new char[str.length() + count * 2 + 1];
for (int i = 0; i < str.length(); i++) {
arr[i] = str.charAt(i);
}
replaceSpaces(arr, str.length(), count);
for (char c : arr) {
System.out.print(c);
}
}
}
1.5---字符串压缩(CC150)
public class Zipper {
public String zipString(String str) {
// write code here
if(str.length() == 0 ) return str;
int flag = 0;
int num = 1;
StringBuffer sb = new StringBuffer();
char tmp = str.charAt(0);
for(int i = 1; i < str.length(); i++){
if(str.charAt(i) == tmp){
num++;
flag = 1;
}
else{
sb.append(tmp);
sb.append(num);
tmp = str.charAt(i);
num = 1;
}
}
sb.append(tmp);
sb.append(num);
if(flag == 0 || sb.length() >= str.length()) return str;
else return sb.toString();
}
}
1.6---旋转二维数组,旋转图像像素,旋转矩阵,90度(CC150)
public int[][] transformImage(int[][] matrix, int n) {
// write code here
n = matrix.length;
int limit = (n-1)/2;
for(int i=0;i<=limit; i++){
for(int j=i;j<n-i-1;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[n-1-j][i];
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
matrix[j][n-1-i] = temp;
}
}
return matrix;
}
18.1---不用加号的加法(CC150)
思路,1,如果只加不进位,1+1=0,1,0相加1.0+0=0;2,如果看什么时候进位,11的时候。
所以就是a^b,a&b。但进位是往前的,所以,a&b<<1.
public static int addAB(int a, int b) {
// write code here
if(b == 0) return a;
int sum = a ^ b;//只加不进位
int carry = (a & b) << 1;//因为只有1,1,时候才进位。
return addAB(sum,carry);
}