目录
一、删除有序数组中的重复项II
一下写过,挺舒服!
1、统计超出2的数量有多少,仅保留2个重复数字
2、有多少次就从后往前覆盖几次
java
public int removeDuplicates(int[] nums) {
int i = 0;
int len = nums.length;
while(i < len){
int count = 1;
while(i+1 < len && nums[i] == nums[i+1]){
count++;
i++;
}
while(count > 2){
move(i,nums,len);
len--;
i--;
count--;
}
i++;
}
return len;
}
public void move(int i,int[] nums,int len){
for(;i < len-1;i++){
nums[i] = nums[i+1];
}
}
二、删除有序数组中的重复项
开始覆盖的时机是当count > 1,仅保留1个重复数字
java
public int removeDuplicates(int[] nums) {
int i = 0;
int len = nums.length;
while(i < len){
int count = 1;
while(i+1 < len && nums[i] == nums[i+1]){
count++;
i++;
}
while(count > 1){
move(i,nums,len);
len--;
i--;
count--;
}
i++;
}
return len;
}
public void move(int i,int[] nums,int len){
for(;i < len-1;i++){
nums[i] = nums[i+1];
}
}
三、数字转罗马格式
难得见题目这么详细的说有哪些情况,然后照着情况来写就行

java
public String intToRoman(int num) {
StringBuilder s = new StringBuilder();
if (num >= 1000) {
int mCount = num / 1000;
num -= (mCount * 1000);
while (mCount-- > 0) {
s.append("M");
}
}
if (num / 100 == 9) {
s.append("CM");
num -= 900;
}
if (num >= 500) {
int dCount = num / 500;
num -= (dCount * 500);
while (dCount-- > 0) {
s.append("D");
}
}
if (num / 100 == 4) {
s.append("CD");
num -= 400;
}
if (num >= 100) {
int cCount = num / 100;
num -= (cCount * 100);
while (cCount-- > 0) {
s.append("C");
}
}
if (num / 10 == 9) {
s.append("XC");
num -= 90;
}
if (num >= 50) {
int lCount = num / 50;
num -= (lCount * 50);
while (lCount-- > 0) {
s.append("L");
}
}
if (num / 10 == 4) {
s.append("XL");
num -= 40;
}
if (num >= 10) {
int lCount = num / 10;
num -= (lCount * 10);
while (lCount-- > 0) {
s.append("X");
}
}
if (num / 1 == 9) {
s.append("IX");
num -= 9;
}
if (num >= 5) {
int lCount = num / 5;
num -= (lCount * 5);
while (lCount-- > 0) {
s.append("V");
}
}
if (num / 1 == 4) {
s.append("IV");
num -= 4;
}
if (num >= 1) {
int lCount = num / 1;
num -= (lCount * 1);
while (lCount-- > 0) {
s.append("I");
}
}
return s.toString();
}