1,题目:给定一个有符号的整数,将此有符号整数反转输出
-(NSInteger)reverseInt:(NSInteger)ParInt
{
NSInteger result = 0;
while (ParInt != 0)
{
NSInteger temp = ParInt % 10; //求模运算
ParInt /= 10; //去除最后一位
result =result * 10 + temp;
}
return result;
}
2,判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
-(BOOL)isPalindrome:(NSInteger)paraInt
{
//小于10不是回文数
if (paraInt <= 10)
{
return NO;
}
//我们拿反转数求模剩余的数字进行比较,反转一半的数就可以,如果是奇数的话,我们只需要把他去除掉即可
NSInteger temp = 0;
while (temp * 10 < paraInt)
{
temp = paraInt % 10 + temp * 10;
paraInt /= 10;
}
return temp == paraInt || temp/10 == paraInt;
}
3,冒泡排序优化( j < sortArray.count - 1 - i 减少循环次数 bFlag 不需要交换的话可以不用循环,加入判空操作)
//我们应该在函数的开始去判断数组的状态已经长度
-(NSArray*)bubbleSort:(NSArray*)array
{
//判断数组状态
if (!array || array.count == 1)
{
return array;
}
NSMutableArray *sortArray = [NSMutableArray arrayWithArray:array];
NSInteger execCount = 0;//交换次数
BOOL bFlag = YES;//是否已经是排序完成
NSInteger forCount = 0;//for循环总共执行了多少次
for (NSInteger i = 0; i < sortArray.count && bFlag; i++)
{
bFlag = NO;
forCount++;
for (NSInteger j = 0; j < sortArray.count - 1 - i; j++)
{
forCount++;
if ([sortArray[j] integerValue] > [sortArray[j + 1] integerValue])
{
[sortArray exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
execCount++;
bFlag = YES;
[self displayArray:sortArray];
}
}
}
NSLog(@"交换共执行了%ld次", execCount);
NSLog(@"for循环共执行了%ld次", forCount);
return sortArray;
}
4,选择排序
//选择排序
//每次把最大的选出来 放到前面,然后依次类推
-(NSArray*)selectSort:(NSArray*)array
{
if (!array || array.count == 1)
{
return array;
}
NSMutableArray *sortResult = [NSMutableArray arrayWithArray:array];
NSInteger flag;
NSInteger execCount = 0;//交换次数
NSInteger forCount = 0;//for循环总共执行了多少次
for (NSInteger i = 0; i < sortResult.count; i++)
{
flag = i;
forCount++;
for (NSInteger j = i; j < sortResult.count - 1; j++)
{
if (sortResult[j + 1] > sortResult[flag])
{
flag = j + 1;
}
forCount++;
}
if (i != flag)
{
[sortResult exchangeObjectAtIndex:i withObjectAtIndex:flag];
execCount++;
[self displayArray:sortResult];
}
}
NSLog(@"交换共执行了%ld次", execCount);
NSLog(@"for循环共执行了%ld次", forCount);
return sortResult;
}
-(void)displayArray:(NSArray*)array
{
NSMutableString *displayString = [NSMutableString stringWithString:@"["];
for (NSInteger i = 0; i < array.count; i++)
{
i == array.count - 1 ? [displayString appendString:[NSString stringWithFormat:@"%ld", (long)[array[i] integerValue]]] :[displayString appendString:[NSString stringWithFormat:@"%ld%@", (long)[array[i] integerValue], @","]];
}
[displayString appendString:@"]"];
NSLog(@"%@", displayString);
}
5,罗马数字转整数
-(NSInteger)romanToInt:(NSString*)roman
{
if([roman integerValue] > 3999 || [roman integerValue] < 1)
{
return 0;
}
NSInteger result = 0;
NSInteger romanLen = roman.length;
NSInteger start = 0;
if (romanLen == 1)
{
result = [self singleRoman:roman];
}
else
{
while (start < romanLen)
{
NSString *temp = [roman substringWithRange:NSMakeRange(start, 1)];
if ([temp isEqualToString:@"I"] || [temp isEqualToString:@"X"] || [temp isEqualToString:@"C"])
{
if (romanLen - start >= 2)
{
NSString *str = [roman substringWithRange:NSMakeRange(start, 2)];
if ([str isEqualToString:@"IV"] || [str isEqualToString:@"IX"] || [str isEqualToString:@"XL"] || [str isEqualToString:@"XC"] || [str isEqualToString:@"CD"] || [str isEqualToString:@"CM"] )
{
result += [self singleRoman:str];
start += 2;
}
else
{
result += [self singleRoman:temp];
start += 1;
}
}
else
{
result += [self singleRoman:temp];
start += 1;
}
}
else
{
result += [self singleRoman:temp];
start += 1;
}
}
}
NSLog(@"返回的数字为%ld", result);
return result;
}
-(NSInteger)singleRoman:(NSString*)roman
{
if ([roman isEqualToString:@"I"])
{
return 1;
}
else if ([roman isEqualToString:@"V"])
{
return 5;
}
else if ([roman isEqualToString:@"X"])
{
return 10;
}
else if ([roman isEqualToString:@"L"])
{
return 50;
}
else if ([roman isEqualToString:@"C"])
{
return 100;
}
else if ([roman isEqualToString:@"D"])
{
return 500;
}
else if ([roman isEqualToString:@"M"])
{
return 1000;
}
else if ([roman isEqualToString:@"IV"])
{
return 4;
}
else if ([roman isEqualToString:@"IX"])
{
return 9;
}
else if ([roman isEqualToString:@"XL"])
{
return 40;
}
else if ([roman isEqualToString:@"XC"])
{
return 90;
}
else if ([roman isEqualToString:@"CD"])
{
return 400;
}
else if ([roman isEqualToString:@"CM"])
{
return 900;
}
return 0;
}
6,编写一个函数来查找字符串数组中的最长公共前缀
-(NSString*)longestCommonPrefix:(NSArray*)stringArray
{
if (stringArray.count == 0)
{
return @"";
}
else if (stringArray.count == 1)
{
return stringArray[0];
}
NSString *minString = stringArray[0];
for (NSInteger i = 1; i < stringArray.count; i++)
{
NSString *temp = stringArray[i];
if (temp.length < minString.length)
{
minString = temp;
}
}
NSInteger minLen = minString.length;
minString = stringArray[0];
NSString *temp;
NSInteger common = 1;//用来记录是否所有的字符串都用相同的前缀
while (minLen > 0)
{
common = 1;//重置
minString = [minString substringWithRange:NSMakeRange(0, minLen)];
for (NSInteger i = 1; i < stringArray.count; i++)
{
temp = [stringArray[i] substringWithRange:NSMakeRange(0, minLen)];
if (![minString isEqualToString:temp])
{
break;
}
else
{
common++;
}
}
if (common == stringArray.count)//判断累计的次数是否和数组长度相同,如果相同就是为公共前缀
{
return minString;
}
minLen--;
}
return @"";
}
7,大数相加
+ (NSString*)additionOfString:(NSString*)strOne AndString:(NSString*)strTwo {
NSMutableString *One = [NSMutableString stringWithFormat:@"%@",strOne];
NSMutableString *Two = [NSMutableString stringWithFormat:@"%@",strTwo];
NSInteger longerLength = 0;
NSInteger t = 0;
int jin = 0;
NSMutableString *strJ = [NSMutableString new];
NSMutableString *sum = [NSMutableString new];
// 补位:位数少的用0补齐,使两个字符串位数相等
if(One.length > Two.length) {
t = One.length - Two.length;
for(NSInteger i =0;i < t;i++) {
[Two insertString:[NSString stringWithFormat:@"0"] atIndex:0];
}
}else if(One.length < Two.length) {
NSInteger t = Two.length - One.length;
for(NSInteger i =0;i < t;i++) {
[One insertString:[NSString stringWithFormat:@"0"] atIndex:0];
}
} else if (One.length== Two.length){
} else {
return @"您的输入有误!";
}
longerLength = One.length;
for(NSInteger i = longerLength - 1; i >= 0;i--) {
unichar onenum = [One characterAtIndex:i];
unichar twonum = [Two characterAtIndex:i];
int onum = [[NSString stringWithFormat:@"%c",onenum] intValue];
int tnum = [[NSString stringWithFormat:@"%c",twonum] intValue];
int c = onum + tnum + jin;
int z = c%10;
jin = c/10;
[strJ appendFormat:@"%d",z];
if(jin!=0&&i ==0) {
[strJ appendFormat:@"%d",jin];
}
}
// 上面得到的是一个倒序字符串,需要变成正序
for(NSInteger i = strJ.length-1; i>= 0;i--) {
unichar k = [strJ characterAtIndex:i];
[sum appendFormat:@"%c",k];
}
return sum;
}
8,大数相乘
+ (NSString*)mutiplyOfString:(NSString*)strOne AndString:(NSString*)strTwo {
NSMutableString *One = [NSMutableString stringWithFormat:@"%@",strOne];
NSMutableString *Two = [NSMutableString stringWithFormat:@"%@",strTwo];
int jin = 0;
NSMutableString *strJ = [NSMutableString new];
NSMutableString *strT = [NSMutableString new]; // strJ的正序
NSString *sum = [NSString new];
NSMutableArray * strJArr = [NSMutableArray array];
for(NSInteger i = One.length-1; i >=0; i--) {
strJ = [NSMutableString new];
strT = [NSMutableString new];
jin = 0;
unichar onenum = [One characterAtIndex:i];
for(NSInteger j = Two.length-1; j >=0; j--){
unichar twonum = [Two characterAtIndex:j];
int onum = [[NSString stringWithFormat:@"%c",onenum] intValue];
int tnum = [[NSString stringWithFormat:@"%c",twonum] intValue];
int c = onum * tnum +jin;
int z = c%10;
jin = c/10;
if(j != 0) {
[strJ appendFormat:@"%d",z];
}else{
//是否最后一位
[strJ appendFormat:@"%d",c%10];
if(c/10 != 0) {
[strJ appendFormat:@"%d",c/10];
}
}
}
// 正序操作
for(NSInteger a = strJ.length-1; a >= 0;a--) {
unichar c = [strJ characterAtIndex:a];
[strT appendFormat:@"%c",c];
}
// 将strT放入数组,稍后加0后进行大数相加;
[strJArr addObject:strT];
}
if(strJArr.count==0){
return @"您的输入有误!";
}
for(NSInteger k =0; k < strJArr.count; k++){
NSMutableString*strP = strJArr[k];
// 高位数补0
for(NSInteger i = k;i >0;i--) {
[strP insertString:[NSString stringWithFormat:@"0"] atIndex:strP.length];
}
// 大数相加
sum = [BigNumberAdd additionOfString:sum AndString:strP];
}
return sum;
}