面试笔试杂项积累-leetcode 66-70
2016-02-01 23:11
597 查看
66.66-Plus One-Difficulty:Easy
Given a non-negative number represented as an array of digits, plus one to the number.The digits are stored such that the most significant digit is at the head of the list.
思路
模拟加一进位,循环加一,而且只是加一,很简单public class Solution {
public int[] PlusOne(int[] digits) {
for (int i = digits.Length - 1; i > -1; i--)
{
if (digits[i] + 1 >= 10)
{
digits[i] = 0;
}
else
{
++digits[i];
return digits;
}
}
int[] fin = new int[digits.Length + 1];
Array.Copy(digits, 0, fin, 1, digits.Length);
fin[0] = 1;
return fin;
}
}
67.67-Add Binary-Difficulty:Easy
Given two binary strings, return their sum (also a binary string).For example,
a =
"11"
b =
"1"
Return
"100".
思路
模拟二进制相加,由于多次操作string,首次使用了StringBuilder,哈哈
分几种情况,二者是0,二者是1,一0一1,分别判断相加。
public class Solution {
public string AddBinary(string a, string b) {
string max = "";
string min = "";
StringBuilder final = new StringBuilder();
if (a.Length >= b.Length)
{
max = a;
min = b;
}
else
{
max = b;
min = a;
}
int temp = 0;
for (int i = 0; i < max.Length; i++)
{
if (i < min.Length)
{
if (min[min.Length - 1 - i] != max[max.Length - 1 - i])
{
if (temp > 0)
{
final.Append("0");
}
else
{
final.Append("1");
}
}
else
{
if (min[min.Length - 1 - i] == 48)
{
if (temp > 0)
{
final.Append("1");
--temp;
}
else
{
final.Append("0");
}
}
else
{
if (temp > 0)
{
final.Append("1");
}
else
{
final.Append("0");
++temp;
}
}
}
}
else
{
if (temp > 0)
{
if (max[max.Length - 1 - i] == 48)//0
{
final.Append("1");
--temp;
}
else//1
{
final.Append("0");
}
}
else
{
min = new string(ReverseStr(final.ToString()));
max = max.Substring(0, max.Length - i );///
return max + min;/////
}
}
}
if (temp > 0)
{
final.Append("1");
}
max = new string(ReverseStr(final.ToString()));
return max;
}
public static char[] ReverseStr(string message)
{
char[] arr = message.ToCharArray();
Array.Reverse(arr);
return arr;
}
}
68.68-Text Justification-Difficulty:Hard
Given an array of words and a length L, format the text such that each line has exactlyL characters and is fully (left and right) justified.
You should pack your words in a greedy approach; that is, pack as many words as you can in each line. Pad extra spaces
' 'when necessary so that each line has exactly L characters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.
For the last line of text, it should be left justified and no extra space is inserted between words.
For example,
words:
["This", "is", "an", "example", "of", "text", "justification."]
L:
16.
Return the formatted lines as:
[ "This is an", "example of text", "justification. " ]
Note: Each word is guaranteed not to exceed
L in length.
思路
很简单,找到可以插入的单词个数之后根据长度可以求出所有空格长度,再平均分配给除最后一个单词所有单词的后面。注意最后一行需要左对齐
public class Solution {
public IList<string> FullJustify(string[] words, int maxWidth) {
IList<string> fin = new List<string>();
int times = 1;
int i_temp = 0;
string str_temp = "";
int length_temp = 0;
int fillsapce = 0;
int space_times = 0;
bool isLast = false;
for (int i = 0; i < words.Length; i++)
{
times = 1;
i_temp = i;
str_temp = "";
length_temp = words[i].Length;
if (i_temp + 1 < words.Length)
while (length_temp + times + words[i_temp + 1].Length <= maxWidth)
{
length_temp += words[i_temp + 1].Length;
++times;
++i_temp;
if (i_temp + 2 > words.Length)
{ isLast = true; break; }
}
fillsapce = maxWidth - length_temp;
if (isLast)//最后一行左对齐
{
for (int j = 0; j < times; j++)
{
words[i + j] += " ";
--fillsapce;
}
for (int j = 0; j < fillsapce; j++)
{
words[i + times - 1] += " ";
}
for (int j = 0; j < times; j++)
{
str_temp += words[j + i];
}
}
else//非最后一行以及最后一行是一个单词的情况
{
space_times = times > 1 ? times - 1 : times;
for (int j = 0; j < fillsapce; j++)
{
words[i + j % space_times] += " ";
}
for (int j = 0; j < times; j++)
{
str_temp += words[j + i];
}
}
i += (times - 1);
fin.Add(str_temp);
}
return fin;
}
}
69.69-Sqrt(x)-Difficulty:Medium
Implementint sqrt(int x).
Compute and return the square root of x.
思路
模拟sqrt函数注意超时问题
试了一下c# Math.Pow函数= =。。。可以通过
使用binary search可以解决超时问题
public class Solution {
public int MySqrt(int x) {
if (x < 0)
return -1;
if (x == 0)
return 0;
int low = 1; // the low should be set to 1. it's different from the search in array.
int high = x / 2 + 1; // the high should be set to x / 2 + 1
int mid;
while (low <= high)
{
mid = (high + low) / 2;
if ((x / mid >= mid) && ((mid + 1) > x / (mid + 1)))
{ //to avoid overflow
return mid;
}
else if (x / mid < mid)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
return -1;
}
}
70.70-Climbing Stairs-Difficulty:Easy
You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
思路
有多少不同的方式能爬到数组顶端,一次能爬1/2步。把上面的左上角到右下角换成线性的了= =。。依旧动态规划问题
public class Solution {
public int ClimbStairs(int n) {
if (n <= 1)
return 1;
if (n == 2)
return 2;
int[] temp = new int
;
temp[0] = 1;
temp[1] = 2;
for (int i = 2; i < n; i++)
{
temp[i] = temp[i - 1]+temp[i-2];
}
return temp[n - 1];
}
}
相关文章推荐
- 面试笔试杂项积累-leetcode 61-65
- 一些集合面试题
- 成为优秀程序员的10个有效方法-要有自己的认识
- 什么样的程序员适合去创业公司
- 程序员努力提升自己,循序渐进学编程
- Android工程师面试题大全
- Andorid-15k+的面试题。
- 给推荐几个对程序员来说神器般存在的软件
- java详细面试题
- 前端面试-浏览器渲染机制
- 程序员必须知道的10大基础实用算法及其讲解
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- 职场三问
- ios面试题 看了就知道哪方面需要加强上机练习
- 面试
- Java面试笔试题大汇总(最全+详细答案)
- 论一个程序员的自我修养
- 黑马程序员-----------检查错误是门很深的学问
- 跟面试官讲Binder(零)
- 黑马程序员-----------返璞归真